我在哪里可以获得学习 EBNF 的材料?
-
21-08-2019 - |
题
扩展巴科斯-诺尔范式: EBNF
我对解析概念很陌生。我在哪里可以获得足够容易阅读和遵循的材料来为 boost::spirit 库编写语法,该库使用类似于 EBNF 的语法?
目前我正在研究 EBNF 来自维基百科。
解决方案
在维基百科文章是准确的。如果你有机会,肯定阅读EBNF Wirth的原创文章。
另外要知道的是,EBNF的设计使得它轻松手动编写递归下降解析器作为其中每个语法结构已经在开始识别关键字语言。大括号转换为while
循环;方括号(可选的东西)转换为if
和替代转化为if-then-else
或case
语句。如果你有这种方式可以快速敲出的解析器设计语言的豪华的和的提供良好的错误消息。
这变得有点乏味的地方是,当你有,其中有缀运营商提供许多不同级别的优先级的语言。对于要戴夫·汉森的论文紧凑递归下降解析。也许普林斯顿技术报告系列有一个免费版本,你可以随时在代码中查找 Hanson的C前结束。
其他提示
BNF 本身很简单,但你需要习惯编译器编写者的思维方式。它们不一定容易阅读,但以下是加州大学伯克利分校和斯坦福大学的讲义。
嗯,我认为维基百科是最简单的方法,原因有二:
- 它指出了文章中最相关的观点
- 页面底部有进一步阅读的链接
我还建议阅读 标准BNF 只是为了熟悉其背后的想法。
至少我也总是从维基百科开始,而且它几乎总是有帮助的。
不隶属于 StackOverflow