使用 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/