【问题标题】:Computer Science text book way to do text/xml/whatever parsing计算机科学教科书进行文本/xml/任何解析的方法
【发布时间】:2010-09-14 03:16:27
【问题描述】:

它在我的脑海里响了一阵子。

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

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

编辑:我非常感谢所有编译器参考资料,我将列出一些书籍,但我的主要关注点是解析本身,而不是你之后用它做什么.

【问题讨论】:

    标签: parsing computer-science theory


    【解决方案1】:

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

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

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

    那里有各种各样的解析方法,所以很难给你一个具体的参考来告诉你你需要知道什么......一般来说,你应该了解top-down parsingbottom-up parsing之间的区别.但如果您有兴趣,这里概述一下解析器生成器采用的一些常用技术:

    编辑: 很抱歉再次提出这个问题,我刚刚偶然看到两篇描述regular languages and finite automatacontext-free languages and push-down automata 之间关系的优秀帖子。发现这个问题的人可能会很感兴趣。

    【讨论】:

    • 确实你的回答更有用。
    【解决方案2】:

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

    【讨论】:

    • FSM 可以识别常规语言,但您需要 PDA 才能识别上下文无关语言。此外,自动机仅识别它不会将其翻译成语法树的语言中的字符串。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      试试amazon

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-07
          • 1970-01-01
          • 2013-01-29
          • 2010-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多