【发布时间】:2010-09-14 03:16:27
【问题描述】:
它在我的脑海里响了一阵子。
我对 Compilers/Flex/Byson 等进行了一些调查,但我从未找到详细讨论“解析堆栈”或如何实现一个的好参考。
有没有人知道我可以赶上的好的参考资料?
编辑:我非常感谢所有编译器参考资料,我将列出一些书籍,但我的主要关注点是解析本身,而不是你之后用它做什么.
【问题讨论】:
标签: parsing computer-science theory
它在我的脑海里响了一阵子。
我对 Compilers/Flex/Byson 等进行了一些调查,但我从未找到详细讨论“解析堆栈”或如何实现一个的好参考。
有没有人知道我可以赶上的好的参考资料?
编辑:我非常感谢所有编译器参考资料,我将列出一些书籍,但我的主要关注点是解析本身,而不是你之后用它做什么.
【问题讨论】:
标签: parsing computer-science theory
这是对您接受为正确答案的 Dima 的回答的回应。虽然说解析与自动机理论有关也不错,但我觉得这里有一些误解。
首先,有限状态自动机只能识别正则语言(例如正则表达式)。为了识别上下文无关语言,您需要下推自动机,它更强大。有关更多自动机及其与不同语言类别的关系,请参阅http://en.wikipedia.org/wiki/Automata_theory#Classes_of_automata。
其次,解析不同于识别。识别字符串只会告诉您该字符串是否是您的语法生成的语言。解析器的目的是生成更难且通常更有用的具体语法树。
那里有各种各样的解析方法,所以很难给你一个具体的参考来告诉你你需要知道什么......一般来说,你应该了解top-down parsing和bottom-up parsing之间的区别.但如果您有兴趣,这里概述一下解析器生成器采用的一些常用技术:
编辑: 很抱歉再次提出这个问题,我刚刚偶然看到两篇描述regular languages and finite automata、context-free languages and push-down automata 之间关系的优秀帖子。发现这个问题的人可能会很感兴趣。
【讨论】:
解析器基本上是一个有限状态机,也就是一个有限自动机。您应该找到一本关于计算理论的书,其中讨论了有限自动机以及常规语言、上下文无关语言等内容。
【讨论】:
查看“Brinch Hansen on Pascal Compilers”。它写于 1985 年,但我在去年的编译器课程中使用了它(当然是 Per Brinch Hansen 的),发现它非常简洁,对编译器设计很有帮助。
【讨论】:
试试amazon
编译器构造只是一个很好的例子
【讨论】:
Dragon book!我最近用它编写了一个编译器(用 PHP!),用于处理用 RTF 编写的模板文件的语言......
【讨论】: