延伸巴克斯 - 诺尔形式: EBNF
我是解剖概念的新手。在哪里可以获得足够的易读性和遵循材料来为boost :: spirit库编写语法,它使用类似于EBNF的语法?
目前我正在研究维基百科的EBNF。
答案 0 :(得分:5)
BNF本身很简单,但你需要习惯编译器编写者的思维方式。它们不一定容易阅读,但以下是加州大学伯克利分校和斯坦福大学的讲义。
答案 1 :(得分:4)
维基百科的文章准确无误。如果您有权访问,请务必在EBNF上阅读Wirth's original article。
另一件需要知道的事情是,EBNF的设计目的是让易于手写递归下降解析器用于语言,其中每个语法结构在开头都有识别关键字。大括号转换为while
循环;方括号(可选内容)转换为if
,替代内容转换为if-then-else
或case
语句。如果您能够以这种方式设计语言,那么可以快速删除解析器和提供良好的错误消息。
这个有点单调乏味的地方就是当你有一种语言,其中有中缀运算符具有许多不同的优先级。为此你想要Dave Hanson的论文Compact Recursive-Descent Parsing of Expressions。也许Princeton技术报告系列有免费版本,您可以随时查看Hanson's C front end中的代码。
答案 2 :(得分:1)
答案 3 :(得分:0)
嗯,我认为维基百科是最简单的方法有两个原因:
另外,我建议阅读standart BNF只是为了熟悉背后的想法。
至少我总是从维基百科开始,它几乎总是有帮助。