计算机科学教科书的方式做text / xml /无论解析

时间:2008-09-29 22:07:58

标签: parsing computer-science theory

我的脑子里已经有一段时间了。

我对Compilers / Flex / Byson和其他东西进行了一些调查,但我从来没有找到一个很好的参考,详细讨论了“解析堆栈”,或者如何实现它。

有没有人知道我能赶上的好参考资料?

编辑:我非常感谢所有的编译器参考资料,并且我将会列出一些列出的书籍,但我主要关注的是解析本身而不是你用它做的事情。

5 个答案:

答案 0 :(得分:10)

Dragon book!我最近用它来编写一个编译器(用PHP!)来处理用RTF编写的模板文件的处理语言......

答案 1 :(得分:3)

这是对Dima的答案的回应,你接受了正确答案。虽然说解析与自动机理论有关并不是一个坏的答案,但我觉得这里存在一些误解。

  • 首先,有限状态自动机只能识别常规语言(例如正则表达式)。为了识别无上下文语言,您需要下推自动机,这是更强大的。有关更多自动机及其与不同语言类别的关系,请参阅http://en.wikipedia.org/wiki/Automata_theory#Classes_of_automata

  • 其次,解析识别不同。识别字符串只会告诉您该字符串是否使用语法生成的语言。解析器的目的是生成一个更具有用性且通常更有用的具体语法树。

那里有各种各样的解析方法,所以很难给你一个具体的参考资料来告诉你你需要知道什么......一般来说,你应该理解top-down parsing和{之间的区别{3}}。但是这里概述了解析器生成器在您感兴趣时使用的一些常用技术:

修改 我很抱歉再次提出这个问题,我刚刚发过两篇很好的帖子来描述Parsing Expression Grammarsregular languages and finite automata之间的关系。对于发现这个问题的人来说,这可能会很有趣。

答案 2 :(得分:1)

解析器基本上是一个有限状态机,也就是一个有限自动机。你应该找一本关于计算理论的书,它讨论有限自动机,以及常规语言,无上下文语言等等。

答案 3 :(得分:0)

尝试amazon

编译器构造只是一个很好的例子

答案 4 :(得分:0)

查看“关于Pascal编译器的Brinch Hansen”..它是在1985年编写的,但我去年用它来编写一个关于编译器的课程(Per Brinch Hansen ofcourse。),发现它非常简洁,有助于编译器设计。