我正在为 Clite 实现一个语法分析器作为编程语言类作业。 我正在使用带有 match() 函数的递归下降解析器,该函数从输入扫描器中获取一个字符串作为参数,并检查它是否是预期的标记,否则它会返回一条错误消息。
我一直在尝试为字母表声明一个集合,这样我就不必匹配字母表中的每个字母。像这样:
void letter(){
if(currentToken==LETTER){
match(LETTER);
}
else
error();
}
我尝试使用#define,但发现它不起作用
#define LETTER "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z"
也尝试过使用 union 或 typedef 但无法做到。有什么想法吗?
最佳答案
http://www.cplusplus.com/reference/cctype/isalpha/
int isalpha ( int c );
检查字符是否为字母
此外,查看相关函数:http://www.cplusplus.com/reference/cctype/
顺便说一下,您尝试的方法永远不会奏效,因为
1) == 不会尝试做诸如“包含于”“是子集”等的事情,而是要求它的两个操作数比较相等。
2) 您正在执行的#define 不是定义数组、容器或任何其他类型的数据结构,那么它为什么会起作用?如果您需要这样做,您可以查看 std::set。
关于c++ - 定义集合 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290534/