Extended Backus-Naur形式:EBNF我在哪里可以获得学习EBNF的材料?
我对解析概念很陌生。我在哪里可以很容易地阅读和遵循用于为boost :: spirit库编写语法的材料,该库使用类似于EBNF的语法?
目前我正在从维基百科调查EBNF。
Extended Backus-Naur形式:EBNF我在哪里可以获得学习EBNF的材料?
我对解析概念很陌生。我在哪里可以很容易地阅读和遵循用于为boost :: spirit库编写语法的材料,该库使用类似于EBNF的语法?
目前我正在从维基百科调查EBNF。
维基百科条目非常精确。如果您有权访问,请在EBNF上阅读Wirth's original article。
另一件要知道的事情是,EBNF的设计目的是为了使易于为递归下降解析器编写语言,其中每个语法结构在开始时都有识别关键字。花括号转换为while
循环;方括号(可选项)翻译为if
,替代翻译为if-then-else
或case
语句。如果你有这样的设计语言的奢侈,你可以快速敲出解析器和给出好的错误信息。
唯一有点乏味的地方是当你有一种语言,其中有许多不同级别的优先级的中缀操作符。为此你需要Dave Hanson的论文Compact Recursive-Descent Parsing of Expressions。也许普林斯顿科技报告系列有一个免费版本,你可以随时查看Hanson's C front end的代码。
BNF本身很简单,但您需要习惯编译器编写者的思维方式。他们不一定容易阅读,但以下是加州大学伯克利分校和斯坦福大学的讲义。
嗯,我认为维基百科是有两个原因最简单的方法:
此外,我建议阅读standart BNF只是为了熟悉背后的想法。
至少我总是从维基百科开始,它几乎总是有帮助的。
要搜索“编译器构建Niklaus Wirth”,它应该返回一个链接,以便您可以自由下载他的优秀书籍的最新版本。或者查看他的主页http://www.cs.inf.ethz.ch/~wirth/ – 2010-06-21 07:12:11