C语言的无上下文文法

27
我正在为C语言编写解析器。我试图找到C语言所有上下文无关的推导列表,最好是使用BNF或类似方法进行表示。我相信这样的东西一定存在,但是在谷歌上搜索并没有给我带来太多收获。
阅读现有解析器/编译器的源代码已被证明比有所帮助更加令人困惑,因为我发现大部分现有解析器/编译器都比我正在构建的解析器更为雄心勃勃和复杂。

8
C语言的Yacc语法: http://www.lysator.liu.se/c/ANSI-C-grammar-y.html - congusbongus
我可以确认这很好。就在上周,我使用了那个页面的LEX/YACC语法构建了一个flex/bison解析器。 - Morten Jensen
2
@JonathanLeffler 不,你仍然可以通过将声明中的类型名称解析为终端标识符并在语义级别执行检查来拥有上下文无关文法。事实上,Clang正是这样做的。 - Stefano Sanfilippo
@MortenJensen 我能问一下您用来构建解析器的预处理器吗?因为 C 语言的 yacc 语法假定翻译阶段 1..5 已经完成。 - Thuy Nguyen
1
@ThuyNguyen 只是 GNU 预处理器 cpp。Mcpp 是另一个备选方案,具有更宽松的许可证。 - Morten Jensen
显示剩余2条评论
2个回答

14

13

3
这是一个链接: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=476。 - user2023370

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接