【发布时间】:2020-01-19 09:33:30
【问题描述】:
我正在尝试用 flex/bison 学习 C 语法。
我发现 bison 无法解析这个 bison 语法:https://www.lysator.liu.se/c/ANSI-C-grammar-y.html,因为 LALR 算法无法递归处理多个表达式。
C语法一定要GLR算法吗?
【问题讨论】:
-
仅供参考,Gcc 已经将解析器从 bison 更改为手写自上而下的解析器已有一段时间了,就像 Clang 所做的那样。正如程序员所说,没有办法避免在野牛中添加丑陋的黑客来解析代码。目前据我所知,没有编译器再使用 LR,所以我认为 GLR 对于 C 语法来说不是必须的。
-
您是如何得出 bison 无法解析该语法的结论的?它肯定可以,所以如果您在尝试时遇到问题(很可能与在语法期望的地方生成类型名标记有关),在此处描述这些问题可能会更有帮助,因此我们可以帮助您解决它们。
-
删除了 C++ 标签。 C++ 有非常不同的解析要求,但在问题的任何地方都没有提到。
标签: c compiler-construction bison flex-lexer