【问题标题】:Tips for writing good EBNF grammars编写好的 EBNF 语法的技巧
【发布时间】:2011-09-22 06:44:43
【问题描述】:
我正在编写一些用于文档解析的扩展 Backus–Naur 形式语法。这些定义的语法有很多优秀的指南,但关于如何设计和构建它们的在线指南却很少。
任何人都可以推荐一些好的文章(或一般提示),说明你喜欢如何编写这些文章,因为即使最终的解析树可以等效,确实似乎是一种风格元素。 p>
例如比如:
- 决定是否应显式标记换行符,还是仅将其视为空格?
- 非终结符的命名方案
- 在长定义中处理可选空格
- 什么时候使用错误的语法检查而不是让那些不匹配
谢谢,
【问题讨论】:
标签:
coding-style
context-free-grammar
ebnf
【解决方案1】:
您应该朝着最舒服的方向工作 - 自下而上、自上而下或“三明治”(两者都做一点,在中间的某个地方相遇)。
任何可以派生并具有其自身含义的“组”都应该从它自己的非终结符开始。例如,我会为所有与换行符相关的空格使用一个非终结符,一个用于所有其他空格,一个用于所有空格(基本上是前两个空格的并集)。
语法中的命名约定通常是非终结符是大写字母或以大写字母开头,而终结符以非大写字母开头(但这当然取决于您设计的语言)。
关于错误的语法检查,我不熟悉这个概念。我对 EBNF 的了解是,您只需编写您的语言接受的所有内容,仅此而已。
一般来说,只需查看来自不同网站的一些不同语言的 EBNF,感受一下它们的外观,然后做你认为合适的事情。