编写编译器

时间:2011-03-16 22:15:28

标签: compiler-construction bison yacc flex-lexer bibtex

我基本上需要为bibtex文件制作一个编译器,以便可以查询给定的bibtex数据库。现在我熟悉理论的某些方面,如自动机,语法,SLR,LR(1)和LALR解析。但是,我仍然发现所有理论和抽象,因为我从来没有应用它。 如果有人能够概述构建编译器所需的可靠步骤,那将会有很大帮助。我可能会使用flex和bison / yacc,所以如果你能让我知道设计过程到底是什么,在什么阶段生成什么文件,每个阶段的输出是什么,以及一般情况如何联系在一起,我可以更加实际地了解事情是如何完成的......

谢谢!

2 个答案:

答案 0 :(得分:1)

我不是编译专家,但我知道这本书实际上被认为是想要编写编译器的人的必读书。是的,封面是陈旧的,但根据我的阅读,它仍然有很多与代码编译相关的好模式:

http://www.amazon.com/Compilers-Principles-Techniques-Alfred-Aho/dp/0201100886

答案 1 :(得分:1)

您确定要编译 bibtex数据库成可执行文件吗?如果查询是您唯一想要的,那么将bibtex数据库转换为关系数据库并使用SQL查询它会更有意义。当然你还是要首先解析bibtex,然后从中生成一个SQL代码,有些人会称之为“编译”,但它远不如已经提到的Dragon Book中的东西复杂。

Bibtex语法非常简单,因此您可以选择任何解析方法。我甚至不愿意使用解析器生成器来处理这样一个简单的语法,并且会改为使用递归下降解析器。根据您选择的语言,它可以非常简单(例如,如果您使用带有Parsec的Haskell,甚至是C#)。

如果你的额外目标是学习像野牛和弹性这样的过时工具,那么,当然,他们也会做这项工作,但这样做太过分了。

编辑:关于经典lex / yacc方法的最佳实用读物是http://en.wikipedia.org/wiki/The_Unix_Programming_Environment