这个C BNF语法不完整吗?

Is this C BNF grammar incomplete?

我经常在书上看到这个C grammar。然而,似乎 <identifier> 从未被宣布过。

我是不是遗漏了什么或者这个语法不完整?

我不能说语法是否完整,但 <identifier> 是一个标记(即终端),与例如<string> 还有许多其他人。

标记不是在语法本身中定义的,而是在词法分析器规范中定义的。

词法分析器是大多数解析器系统的一个组件,它读取原始输入并将其转换为解析器随后使用的更高级别标记流 (a.k.a.lexemes)。

C 标准定义了两种文法:词法文法和"Phrase structure grammar"。在 C99 标准中,您可以分别在附件 A.1 和 A.2 中找到它们。

词法语法是派生单个标记的常规语法。它的终端是独立的字符。源代码可以通过重复从词法语法中推导出词来处理成一系列标记。

短语结构文法是一个 CFG(添加了一些额外的 non-context 纯英语自由限制),其终端是词法文法中定义的词法元素(或者更确切地说 pre-processed 版本他们)。

你link中的语法是基于短语结构语法,不包括词汇语法。因此它不包含标识符和其他令牌的规则,而只是将它们用作终端。