【发布时间】:2013-03-19 06:00:15
【问题描述】:
我正在开发 C 的解析器。我正在尝试查找 C 的所有上下文无关派生的列表。理想情况下,它应该是 BNF 或类似的。我确信这样的事情就在那里,但谷歌搜索并没有给我太多。
事实证明,阅读现有解析器/编译器的源代码更令人困惑,而不是有用,因为我发现的大多数比我正在构建的更雄心勃勃和复杂。
【问题讨论】:
-
C 的 yacc 语法:lysator.liu.se/c/ANSI-C-grammar-y.html
-
我可以确认这很好。就在前一周,我从该页面的 LEX/YACC 语法中构建了一个 flex/bison 解析器。
-
@CongXu,看起来不错,唯一的缺点是我看到它只是历史 C,既不是 C99 也不是 C11。
-
@JonathanLeffler 不,您仍然可以通过将声明中的类型名称解析为终端标识符并在语义级别执行检查来获得上下文无关语法。事实上,Clang 正是这样做的。
-
@ThuyNguyen 只是 GNU 预处理器 cpp。 Mcpp 是另一种具有更宽松许可证的替代方案
标签: c context-free-grammar bnf