我被分配任务将一种语言翻译成另一种语言。源语言过于灵活(复杂),无法使用正则表达式进行简单的逐行处理。我应该去哪里学习有关词法分析器和解析器的知识?
我最近一直在使用PLY,这是Python中lex和yacc的实现。它很容易入门,并且文档中有一些简单的示例。
解析可能很快变成一个非常技术性的话题,如果您使用像PLY这样的解析器生成器,您可能不需要了解所有解析算法的细节。
另一本值得考虑的教材是编程语言实践。我更喜欢它而不是龙书,但你的看法可能不同。
如果你正在使用Perl,另一个要考虑的工具是Parse::RecDescent。
如果你只需要进行一次翻译,并且对编译器技术一无所知,我建议你尽可能地进行一些相当简单的翻译,然后手动修复它。是的,这是很多工作。但这比学习一个复杂的主题并为一个工作编写正确的解决方案要少得多。话虽如此,你仍然应该学习这个主题,但不要让不了解它成为完成当前项目的障碍。
在上了(相当)多的编译器课程后,我使用过The Dragon Book和C&T这两本书。我认为C&T更好地让编译器构建易于理解。不是贬低The Dragon Book,但我认为C&T是一本更实用的书。
解析技术 - 实用指南 作者:Dick Grune 和 Ceriel J.H. Jacobs
这本书(PDF 免费提供)详细介绍了不同的解析技术/算法。如果你真的想要理解不同的解析算法,我认为这是比《龙书》更好的参考资料(因为《解析技术》完全专注于解析,而《龙书》仅将解析作为编译器构建过程中的一个重要部分)。