扩展巴科斯-诺尔范式: EBNF

我对解析概念很陌生。我在哪里可以获得足够容易阅读和遵循的材料来为 boost::spirit 库编写语法,该库使用类似于 EBNF 的语法?

目前我正在研究 EBNF 来自维基百科。

有帮助吗?

解决方案

在维基百科文章是准确的。如果你有机会,肯定阅读EBNF Wirth的原创文章

另外要知道的是,EBNF的设计使得它轻松手动编写递归下降解析器作为其中每个语法结构已经在开始识别关键字语言。大括号转换为while循环;方括号(可选的东西)转换为if和替代转化为if-then-elsecase语句。如果你有这种方式可以快速敲出的解析器设计语言的豪华的的提供良好的错误消息。

这变得有点乏味的地方是,当你有,其中有缀运营商提供许多不同级别的优先级的语言。对于要戴夫·汉森的论文紧凑递归下降解析。也许普林斯顿技术报告系列有一个免费版本,你可以随时在代码中查找 Hanson的C前结束

其他提示

BNF 本身很简单,但你需要习惯编译器编写者的思维方式。它们不一定容易阅读,但以下是加州大学伯克利分校和斯坦福大学的讲义。

这里是在PHP一个EBNF解析器。

此外,学习一些关于正则表达式引擎是如何实施可能的帮助。尝试: RE2

嗯,我认为维基百科是最简单的方法,原因有二:

  • 它指出了文章中最相关的观点
  • 页面底部有进一步阅读的链接

我还建议阅读 标准BNF 只是为了熟悉其背后的想法。

至少我也总是从维基百科开始,而且它几乎总是有帮助的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top