我经常在书中看到这个C grammar。但是,似乎从未声明过<identifier>
。
我错过了什么吗?还是这个语法不完整?
答案 0 :(得分:5)
我不能说语法是否完整,但是<identifier>
是一个标记(即终端),其方式与<string>
和其他许多人。
标记不是在语法本身中定义的,而是在词法分析器规范中定义的。
词法分析器是大多数解析器系统的组件,该系统读取原始输入并将其转换为解析器随后使用的更高级别的令牌流(又称词位)。
答案 1 :(得分:2)
C标准定义了两种语法:词法语法和“短语结构语法”。在C99标准中,您可以分别在附件A.1和A.2中找到它们。
词汇语法是派生单个记号的常规语法。它的终端是单个字符。通过反复从词汇语法中提取单词,可以将源代码处理为一系列标记。
短语结构语法是CFG(以普通英语添加了一些其他的无上下文限制),其终端是词法语法中定义的词法元素(或更确切地说是它们的预处理版本)。
链接中的语法基于短语结构语法,不包括词法语法。因此,它不包含标识符和其他令牌的规则,而只是将它们用作终端。