Pau*_*gar 11
很有诱惑去龙书学习解析理论.但我不认为龙书和你对"理论"的含义有同样的看法.Dragon Book描述了如何构建手写解析器,解析器生成器等,但您几乎肯定希望使用解析器生成工具.
一些人建议使用Bison和Flex(或者他们的旧版本Yacc和Lex).那些是旧的坚定者,但它们不是非常有用的工具.他们的文档本身并不差,只是它在处理使用它们的意外复杂性方面没有多大帮助.他们的内部数据没有很好地封装,很难用它们做任何先进的事情.例如,在phc中,我们仍然没有正确的行号,因为它非常困难.当我们修改语法以包含No-op语句时,它们会变得更好,但这是一个令人难以置信的黑客攻击,这是不必要的.
表面上看,Bison和Flex一起工作,但界面很尴尬.更糟糕的是,每个版本都有很多版本,只能与另一个版本的某些特定版本很好地配合使用.而且,最后我至少检查了哪些版本的文档很差.
编写递归下降解析器很简单,但可能很乏味.Antlr可以为你做到这一点,它似乎是一个非常好的工具集,有益于你在这个项目上学到的东西可以应用于许多其他语言和平台(Antlr非常便携).还有很多现有的语法可供学习.
不清楚你在使用什么语言,但有些语言有很好的解析框架.特别是,Haskell Parsec Library看起来非常优雅.如果你使用C++,你可能会想要使用Spirit.我发现很容易上手,但很难 - 但仍然可能 - 用它做高级的事情.这与我一般的C++经验相符.我说我发现它很容易启动,但后来我已经编写了几个解析器,并研究了编译器类中的解析.
长话短说:Antlr,除非你有一个很好的理由.