1

我正在为文档解析编写一些扩展的 Backus–Naur 形式语法。这些定义的语法有很多优秀的指南,但是关于如何设计和构建它们的在线指南却很少。

任何人都可以建议关于您喜欢如何编写这些的好文章(或一般提示),因为即使最终的解析树可以等效,似乎也有一种风格元素

例如:

  • 决定是否应该明确地标记换行符,或者只是将其视为空格?
  • 非终结符的命名方案
  • 处理长定义中的可选空格
  • 何时使用错误的语法检查而不是让那些不匹配

谢谢,

4

1 回答 1

1

你应该朝着你最舒服的方向工作——自下而上、自上而下或“三明治”(两者都做一点,在中间的某个地方相遇)。
任何可以派生并具有自己含义的“组”都应该从它自己的非终结符开始。例如,我会为所有与换行符相关的空格使用一个非终端,一个用于所有其他空格,一个用于所有空格(基本上是前两个空格的并集)。

语法中的命名约定通常是非终结符是大写字母或以大写字母开头,而终结符以非大写字母开头(但这当然取决于您正在设计的语言)。

关于错误的语法检查,我不熟悉这个概念。我对 EBNF 的了解是,您只需编写您的语言接受的所有内容,仅此而已。

通常,只需查看来自不同网站的一些不同语言的 EBNF,感受一下它们的外观,然后做你觉得合适的事情。

于 2011-09-22T15:16:31.543 回答