c++ - 使用 flex/yacc 编写 C++ 编译器需要多少时间?

标签 c++ compiler-construction bison yacc flex-lexer

使用 lex/yacc 编写 C++ 编译器需要多少时间?

我可以从哪里开始?

最佳答案

bison/yacc 解析器无法解析许多解析规则(例如,在某些情况下区分声明和函数调用)。此外,有时对标记的解释需要来自解析器的输入,尤其是在 C++0x 中。例如,对字符序列 >> 的处理非常依赖于解析上下文。

这两个工具对于解析 C++ 来说是非常糟糕的选择,并且为了正确解析 C++,您必须放入许多超出这些工具所依赖的基本框架的特殊情况。这将花费您很长时间,即使如此,您的解析器也可能会出现奇怪的错误。

yacc 和 bison 是 LALR(1)解析器生成器,它们不够复杂,无法有效处理 C++。正如其他人所指出的,大多数 C++ 编译器现在使用 recursive descent解析器,以及其他几个答案都指出了编写自己的解决方案的好方法。

C++ 模板不适合处理字符串,即使是常量字符串(虽然这可能在 C++0x 中已修复,我没有仔细研究过),但如果是,您可以很容易地编写递归下降解析器C++ 模板语言。我觉得这很有趣。

关于c++ - 使用 flex/yacc 编写 C++ 编译器需要多少时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1961604/

相关文章:

c++ - Boost类序列化,成员类型的改变

c - 这个 C 编译器错误是什么意思?

visual-studio - 对 Visual Studio C++ 项目使用/Zi vs/Z7 有什么影响?

compiler-construction - 如何使用 ANTLR 修改 CommonTokenStream 中的 token 文本?

parsing - LR 属性解析器技术

c++ - std::vector of objects/pointers/smart pointers to pass objects (bus error: 10)?

c++ - 需要在 C++ 中找到两个 XML 文件之间的区别

c++ - 在类构造函数中初始化 protected 常量

macos - 在Mac OS X 10.6上编译和执行莎士比亚编程语言转换器spl2c会导致警告/错误

bison - 解决Shift/Reduce冲突的语法规范