1

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

谢谢!

4

2 回答 2

1

我不是编译器专家,但我知道这本书实际上被认为是任何想编写编译器的人的必读之书。是的,封面已经过时了,但从我读到的内容来看,它仍然有许多与代码编译相关的好模式:

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

于 2011-03-16T22:21:52.247 回答
1

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

Bibtex 语法非常简单,因此您可以选择任何解析方法。对于这种琐碎的语法,我什至不会费心使用解析器生成器,而是会写一个递归下降解析器。根据您选择的语言,它可能非常简单(例如,如果您使用带有 Parsec 的 Haskell,甚至是 C#)。

如果您的额外目标是学习像 bison 和 flex 这样过时的工具,那么它们当然也可以完成这项工作,但这是矫枉过正。

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

于 2011-03-17T11:13:56.933 回答