扩展Backus–Naur形式: EBNF
我是解析概念的新手。在哪里可以足够容易地阅读和遵循有关为boost::spirit库编写语法的 Material ,该库使用类似于EBNF的语法?
目前,我正在研究Wikipedia中的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中的代码。
关于compiler-construction - 在哪里可以获得学习EBNF的 Material ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/365012/