延伸巴克斯 - 诺尔形式:EBNF
我是解剖概念的新手.在哪里可以获得足够的易读性和遵循材料来编写boost :: spirit库的语法,它使用类似于EBNF的语法?
目前我正在研究维基百科的EBNF.
BNF本身很简单,但你需要习惯编译器编写者的思维方式.它们不一定容易阅读,但以下是加州大学伯克利分校和斯坦福大学的讲义.
伯克利CS 164:讲义
斯坦福大学CS143:讲义
维基百科的文章是准确的。如果有访问权限,请绝对阅读Wirth关于EBNF 的原始文章。
要知道的另一件事是,EBNF旨在简化针对每种语法结构在开始时都具有识别关键字的语言的手写递归下降解析器的需求。花括号转换为while
循环;方括号(可选的东西)转换为if
,替代项转换为if-then-else
或case
语句。如果您可以通过这种方式来设计语言,那么您可以快速关闭解析器并给出良好的错误消息。
唯一令人厌烦的地方是当您使用一种语言时,其中的中缀运算符具有许多不同的优先级。为此,您需要Dave Hanson的论文《表达式的紧凑递归-下降解析》。也许普林斯顿大学的技术报告系列有免费版本,您可以随时查看Hanson C前端中的代码。