Parsing 计算机科学教科书进行文本/xml/任何解析的方法

Parsing 计算机科学教科书进行文本/xml/任何解析的方法,parsing,computer-science,theory,Parsing,Computer Science,Theory,它在我的脑子里萦绕了一段时间 我对Compilers/Flex/Byson等进行了一些调查,但我从未找到一个好的参考资料详细介绍“解析堆栈”,或者如何实现一个 有人知道我可以在哪里找到好的推荐人吗 编辑:我非常感谢所有的编译器参考资料,我将列出一些书,但我主要关注的是解析本身,而不是解析后的处理。试试看 编译器构造只是一个很好的例子!我最近使用它为用RTF编写的模板文件的处理语言编写了一个编译器(用PHP!)。请查看“Brinch Hansen on Pascal编译器”。。它写于1985年,但

它在我的脑子里萦绕了一段时间

我对Compilers/Flex/Byson等进行了一些调查,但我从未找到一个好的参考资料详细介绍“解析堆栈”,或者如何实现一个

有人知道我可以在哪里找到好的推荐人吗

编辑:我非常感谢所有的编译器参考资料,我将列出一些书,但我主要关注的是解析本身,而不是解析后的处理。

试试看


编译器构造只是一个很好的例子!我最近使用它为用RTF编写的模板文件的处理语言编写了一个编译器(用PHP!)。

请查看“Brinch Hansen on Pascal编译器”。。它写于1985年,但我去年在一门关于编译器的课程(当然是Per Brinch Hansen)中使用了它,发现它非常简洁,对编译器设计很有帮助。

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

这是对Dima的答案的回应,你认为这是正确的答案。虽然这是一个不错的回答,说明解析与自动机理论有关,但我觉得这里有一些误解

  • 首先,有限状态自动机只能识别正则语言(例如正则表达式)。为了识别上下文无关的语言,您需要更强大的下推自动机。有关更多自动机及其与不同语言类的关系,请参见

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

有各种各样的解析方法,所以很难给你一个具体的参考,告诉你你需要知道什么。。。一般来说,您应该理解和之间的区别。但这里概述了解析器生成器在您感兴趣的情况下使用的一些常见技术:

  • 维基百科上的文章
  • 安特尔氏
  • (用于在函数式编程语言中构建解析器)
  • 还有更多的异国情调
编辑:
我很抱歉再次提出这个问题,我碰巧看到了两篇很好的文章,描述了,和,之间的关系。对于发现这个问题的人来说可能很有趣。

FSM可以识别常规语言,但您需要PDA来识别上下文无关的语言。此外,自动机只识别语言中的字符串,而不会将其转换为语法树。事实上,您的答案更有用。