2008-12-13 78 views
9

Extended Backus-Naur形式:EBNF我在哪里可以获得学习EBNF的材料?

我对解析概念很陌生。我在哪里可以很容易地阅读和遵循用于为boost :: spirit库编写语法的材料,该库使用类似于EBNF的语法?

目前我正在从维基百科调查EBNF

回答

4

维基百科条目非常精确。如果您有权访问,请在EBNF上阅读Wirth's original article

另一件要知道的事情是,EBNF的设计目的是为了使易于为递归下降解析器编写语言,其中每个语法结构在开始时都有识别关键字。花括号转换为while循环;方括号(可选项)翻译为if,替代翻译为if-then-elsecase语句。如果你有这样的设计语言的奢侈,你可以快速敲出解析器给出好的错误信息。

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

+1

要搜索“编译器构建Niklaus Wirth”,它应该返回一个链接,以便您可以自由下载他的优秀书籍的最新版本。或者查看他的主页http://www.cs.inf.ethz.ch/~wirth/ – 2010-06-21 07:12:11

0

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

  • 它指出在文章最相关的点
  • 它在页面底部有进一步阅读链接

此外,我建议阅读standart BNF只是为了熟悉背后的想法。

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

1

Here是一个PHP中的ebnf解析器。

另外,学习一点关于正则表达式引擎的实现可能会有所帮助。试试:re2

相关问题