我需要解析不同文件的源代码,每个文件用不同的语言编写,我想用C来做。
为此,我考虑使用yacc
/ lex
,但我发现它们很难理解,可能是由于完全缺乏体面的文档(或者它们真的是隐蔽)。
所以我的问题是:我在哪里可以找到yacc
/ lex
的一些好文档,最好是教程样式介绍?或者,有没有更好的方法在C中这样做?也许还有其他我可以使用的东西,而不是yacc
/ lex
,甚至可能用不同的语言写的?
答案 0 :(得分:5)
yacc
和lex
是非常强大的工具,围绕编译器构造理论构建。为了能够完全理解它们,您可能需要一些形式语言,自动机理论和编译器构造的基础知识。
dragon book是这个主题的经典之作。
答案 1 :(得分:1)
Kernighan的后半部分和Pike的 Unix编程环境是对使用lex和yacc编写解释器的扩展介绍。 lex覆盖范围有点轻,因为它们大多使用自定义扫描仪。
答案 2 :(得分:0)
如果您喜欢数学(这个答案中最重要的条款),那么编写自己的编译器编译器,然后用它编写编译器。我曾经这样做过一次,因为我厌倦了为编译器的所有产品编写所有函数,这些编译器起初是一个递归下降的编译器,因为2004年的可用选择并没有让我高兴,因为我有空闲时间找工作的同时。我只在一个项目上使用了编译器编译器,它不一定经过全面测试,所以它不在github上。我对我设计的语法文件语法非常满意。
如果我今天有这样的需要,我可能会做出不同的决定。在过去的8年中,新的尖端CC似乎发生了很大的变化。