我在哪里可以获得学习EBNF的材料?

时间:2008-12-13 08:47:40

标签: compiler-construction boost parsing bnf ebnf

延伸巴克斯 - 诺尔形式: EBNF

我是解剖概念的新手。在哪里可以获得足够的易读性和遵循材料来为boost :: spirit库编写语法,它使用类似于EBNF的语法?

目前我正在研究维基百科的EBNF

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

另一件需要知道的事情是,EBNF的设计目的是让易于手写递归下降解析器用于语言,其中每个语法结构在开头都有识别关键字。大括号转换为while循环;方括号(可选内容)转换为if,替代内容转换为if-then-elsecase语句。如果您能够以这种方式设计语言,那么可以快速删除解析器提供良好的错误消息。

这个有点单调乏味的地方就是当你有一种语言,其中有中缀运算符具有许多不同的优先级。为此你想要Dave Hanson的论文Compact Recursive-Descent Parsing of Expressions。也许Princeton技术报告系列有免费版本,您可以随时查看Hanson's C front end中的代码。

答案 2 :(得分:1)

Here是php中的ebnf解析器。

另外,了解一下如何实现正则表达式引擎可能会有所帮助。尝试:re2

答案 3 :(得分:0)

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

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

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

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