Bar*_*ter 8 yacc programming-languages
我正在研究新的编程语言,但我总是对每个人都使用yaxx/lex来解析代码感到困惑,但事实并非如此.
我的编译器(已经工作)是用C++/STL手动编码的,我不能说它复杂或占用太多时间.它有某种词法分析器和解析器,但它们不是自动生成的.
早些时候,我用同样的方式编写了一个C编译器(不是完整的规范) - 它能够在1遍中编译程序,所有这些反向引用解析和预处理 - 这对于yacc/lex来说绝对是不可能的.
我无法说服自己废弃所有这些,并开始深入研究yaxx/lex - 这可能需要付出相当大的努力才能实现,并且可能会引入一些语法限制.
不使用yacc/lex时有什么我想念的吗?我做恶事吗?
使用任何类型的词法分析器/解析器生成器的主要优点是,如果您的语言发展,它将为您提供更大的灵活性.在一个手工编写的词法分析器/解析器中(特别是如果你在一次通过中混合了许多功能!),对语言的更改会很快变得讨厌,而使用解析器生成器进行更改,重新运行发电机,继续你的生活.总是只是手工编写所有内容,当然没有固有的技术限制,但我认为自动消除无聊位的可演化性和可维护性是值得的!
Yacc 在某些方面不灵活:
此外,我注意到 lex/yacc 目标代码通常比手写的递归下降解析器大(源代码往往是相反的)。
我没有使用过 ANTLR,所以我不能说这在这些方面是否更好。