我正在为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但无法执行此操作。有什么想法吗?
答案 0 :(得分:1)
http://www.cplusplus.com/reference/cctype/isalpha/
int isalpha(int c);
检查字符是否为字母
另外,请查看相关功能:http://www.cplusplus.com/reference/cctype/
顺便说一下,你所尝试的东西永远不会起作用,因为
1)==不会尝试做''被'包含'之类的事情是'等的子集,但要求它的两个操作数相等。
2)你正在做的#define没有定义数组,容器或任何其他类型的数据结构,那么为什么它会起作用?如果你需要这样做,你可以查看std :: set。