它已经在我的大脑中发出嘎嘎声了一段时间。

我已经对Compilers / Flex / Byson和其他东西进行了一些调查,但是我没有找到一个很好的参考资料,其中没有详细介绍“解析栈”或如何实现它。

有人知道我可以追上好的参考书吗?

编辑:我非常感谢所有编译器参考,并且我将列出其中的一些书,但是我的主要重点是解析本身,而不是您以后要使用的内容。

最佳答案

这是对您接受为正确答案的Dima的回答。尽管可以肯定地说解析与自动机理论有关,但我感到这里有些误解。

  • 首先,有限状态自动机只能识别正则语言(例如正则表达式)。为了识别上下文无关的语言,您需要下推自动机,其功能更强大。有关更多自动机及其与不同类语言的关系,请参见http://en.wikipedia.org/wiki/Automata_theory#Classes_of_automata
  • 其次,解析与识别的不同。识别字符串只会告诉您该字符串是否使用语法生成的语言。解析器的目的是产生一个更具体且更有用的具体语法树。

  • 那里有各种各样的解析方法,因此很难为您提供一个具体的参考来告诉您您需要了解的内容...通常,您应该了解top-down parsingbottom-up parsing之间的区别。但是,如果有兴趣,这里是解析器生成器采用的一些常用技术的概述:
  • 的维基百科文章LR ParsingLL ParsingSLR ParsingLALR ParsingGLR Parsing
  • ANTLR的LL(*) parsing
  • Monadic Parsing in Haskell(用于以功能编程语言构建解析器)
  • 和更奇特的Parsing Expression Grammars

  • 编辑:
    很抱歉再次提出这个问题,我碰巧遇到了两篇描述regular languages and finite automatacontext-free languages and push-down automata之间关系的出色文章。对于发现此问题的人可能会很有趣。

    07-26 08:54