1

我正在为 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 但做不到。有任何想法吗?

4

1 回答 1

1

http://www.cplusplus.com/reference/cctype/isalpha/

int isalpha ( int c );

检查字符是否为字母

另外,查看相关功能:http ://www.cplusplus.com/reference/cctype/

顺便说一句,你所尝试的永远不会奏效,因为

1) == 不会尝试做诸如“被包含”、“是子集”等的事情,而是要求它的两个操作数比较相等。

2)您正在做的#define 不是定义数组、容器或任何其他类型的数据结构,那么它为什么会起作用?如果您需要这样做,您可以查看 std::set 。

于 2013-04-30T01:03:08.380 回答