扩展巴库斯-瑙尔形式:EBNF
我对解析概念很陌生。我在哪里可以获得足够容易阅读和遵循的材料来为 boost::spirit 库编写语法,它使用类似于 EBNF 的语法?
目前我正在从维基百科研究EBNF。
BNF 本身很简单,但是您需要习惯编译器编写者的思维方式。它们不一定容易阅读,但以下是加州大学伯克利分校和斯坦福大学的讲义。
维基百科的文章是准确的。如果您有访问权限,请务必阅读Wirth关于 EBNF 的原始文章。
要知道的另一件事是,EBNF 的设计目的是使手写递归下降解析器变得容易,因为在这些语言中,每个句法结构在开始时都有识别关键字。花括号转换为while
循环;方括号(可选的东西)转换为if
,替代项转换为if-then-else
orcase
语句。如果您有幸以这种方式设计您的语言,您可以快速敲出解析器并给出良好的错误消息。
唯一有点乏味的地方是当你的语言中存在具有许多不同优先级的中缀运算符时。为此,您需要 Dave Hanson 的论文Compact Recursive-Descent Parsing of Expressions。也许普林斯顿科技报告系列有免费版,你可以随时查看汉森的C前端代码。
好吧,我认为维基百科是最简单的方法,原因有两个:
另外,我建议阅读标准 BNF以熟悉其背后的想法。
至少我也总是从维基百科开始,而且它几乎总是有帮助的。