访问【WRITE-BUG数字空间】_[内附完整源码和文档]
语义分析本质上就是在语法分析的基础上进一步完善分析的功能。举个例子来说,在语法分析部分的 if_stmt 函数中,在语义上判断条件必须返回布尔类型的值,因此我们加入一个判断,判断是否结果为布尔类型,如果不是的话就抛出异常。
一、关键词(KEY)
Tiny+ 中可能出现的关键词包括以下这些
// 定义语法中所有可能出现的关键词
bool Token::is_KEY(string& str) {
return str == “true” || str == “false” || str == “or” ||
str == “and” || str == “not” || str == “int” ||
str == “bool” || str == “string” || str == “while” ||
str == “do” || str == “if” || str == “then” ||
str == “else” || str == “end” || str == “repeat”
|| str == “until” || str == “read” || str == “write”;
}
二、特殊符号(SYM)
常见特殊符号包括以下这些,其中注释用大括号包括。
// 判断是否为特殊符号
bool LexicalAnalysis::is_special_symbol(char c) {
return c == ‘:’ || c == ‘,’ || c == ‘;’ ||
c == ‘<’ || c == ‘>’ || c == ‘=’ ||
c == ‘+’ || c == ‘-’ || c == ‘*’ ||
c == ‘/’ || c == ‘(’ || c == ‘)’ ||
c == ‘{’ || c == ‘}’;
}
其中单引号包括起来的是字符串,需要特殊考虑。在处理单引号包括的内容时,我们不做任何处理,并维持当前单引号状态
三、标识符(ID)
标识符由非数字开头的字符串,用来代表变量名等。
四、空白(blank)
Tiny 中常见空白包括:空格(0x20)、水平制表(0x09)、垂直制表(0x0B)、换页(0x0C)、回车(0x0D)和换行符(0x0A)
语义分析实验
一、实验目的
语义分析本质上就是在语法分析的基础上进一步完善分析的功能。举个例子来说,在语法分析部分的 if_stmt 函数中,在语义上判断条件必须返回布尔类型的值,因此我们加入一个判断,判断是否结果为布尔类型,如果不是的话就抛出异常。