【发布时间】:2008-12-13 08:47:39
【问题描述】:
扩展巴科斯-瑙尔形式:EBNF
我对解析概念非常陌生。我在哪里可以获得足够容易阅读和遵循的材料来编写 boost::spirit 库的语法,它使用类似于 EBNF 的语法?
目前我正在查看来自维基百科的EBNF。
【问题讨论】:
标签: compiler-construction boost parsing bnf ebnf
扩展巴科斯-瑙尔形式:EBNF
我对解析概念非常陌生。我在哪里可以获得足够容易阅读和遵循的材料来编写 boost::spirit 库的语法,它使用类似于 EBNF 的语法?
目前我正在查看来自维基百科的EBNF。
【问题讨论】:
标签: compiler-construction boost parsing bnf 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 以熟悉其背后的想法。
至少我也总是从维基百科开始,而且它几乎总是有帮助。
【讨论】: