【问题标题】:Where can I get material for learning EBNF?我在哪里可以获得学习 EBNF 的材料?
【发布时间】:2008-12-13 08:47:39
【问题描述】:

扩展巴科斯-瑙尔形式:EBNF

我对解析概念非常陌生。我在哪里可以获得足够容易阅读和遵循的材料来编写 boost::spirit 库的语法,它使用类似于 EBNF 的语法?

目前我正在查看来自维基百科的EBNF

【问题讨论】:

    标签: compiler-construction boost parsing bnf ebnf


    【解决方案1】:

    维基百科的文章是准确的。如果您有访问权限,请务必阅读 EBNF 上的 Wirth's original article

    要知道的另一件事是,EBNF 旨在使 易于手写递归下降解析器,用于每个句法构造在开头都有标识关键字的语言。花括号转换为while 循环;方括号(可选的东西)转换为if,替代转换为if-then-elsecase 语句。如果您有幸以这种方式设计语言,您可以快速敲出解析器提供良好的错误消息。

    唯一有点乏味的地方是当你的语言中有许多不同优先级的中缀运算符时。为此,您需要 Dave Hanson 的论文 Compact Recursive-Descent Parsing of Expressions。或许普林斯顿科技报告系列有免费版,大家可以随时查看Hanson's C front end中的代码。

    【讨论】:

    • 搜索“Compiler Construction Niklaus Wirth”,应该会返回一个链接,您可以免费下载他的优秀著作的最新版本。或查看他的主页cs.inf.ethz.ch/~wirth
    【解决方案2】:

    BNF 本身很简单,但您需要习惯编译器编写者的思维方式。它们不一定容易阅读,但以下是加州大学伯克利分校和斯坦福大学的讲义。

    【讨论】:

      【解决方案3】:

      Here 是 php 中的 ebnf 解析器。

      此外,了解一些有关如何实现正则表达式引擎的知识可能会有所帮助。试试:re2

      【讨论】:

        【解决方案4】:

        嗯,我认为维基百科是最简单的方法有两个原因:

        • 它说明了文章中最相关的观点
        • 页面底部有进一步阅读的链接

        另外我建议阅读 standart BNF 以熟悉其背后的想法。

        至少我也总是从维基百科开始,而且它几乎总是有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-12
          • 2010-09-06
          • 2010-10-10
          • 2020-05-26
          • 1970-01-01
          • 1970-01-01
          • 2011-10-26
          相关资源
          最近更新 更多