c++ - 定义集合 C++

标签 c++ c parsing syntax

我正在为 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/

相关文章:

c++ - 纹理显示不正确 - 可能坐标错误 OpenGL、C++

c++ - 编译时出错

c++ - 结构体之外的函数定义 C++

c - 如何从 C 函数返回二维数组?

C - 检索大于 8 位的 child 的退出状态

带有空分隔符的 Java 扫描器

ruby - 使用 ruby​​ 解析 PDF 文档

c++ - C++11 是否引入了不区分大小写的字符串比较算法?

c - 哪个 Linux 内核函数创建了 'process 0' ?

algorithm - LL(*) 解析器如何工作?