编写优秀EBNF语法的技巧

时间:2011-09-22 06:44:44

标签: coding-style context-free-grammar ebnf

我正在为文档解析编写一些Extended Backus-Naur Form语法。这些定义的语法有很多优秀的指南,但很少有关于如何设计和构造它们的在线。

任何人都可以提出一些好的文章(或一般提示),关于你如何写这些文章,因为 似乎是风格的元素,即使最终的解析树可以是等价的。

e.g。比如:

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

谢谢,

1 个答案:

答案 0 :(得分:1)

你应该朝着你最舒服的方向工作 - 自下而上,自上而下或“三明治”(做两件事,在中间的某个地方见面)。
任何可以派生并具有其自身含义的“组”应该从它自己的非终端开始。因此,例如,我将使用非终端用于所有与换行相关的空格,一个用于所有其他空格,一个用于所有空格(基本上是前者2的联合)。

语法中的命名约定一般是非终端是大写字母,或者以大写字母开头,终端以非大写字母开头(但这当然取决于你设计的语言)。

关于错误的语法检查,我不熟悉这个概念。我对EBNF的了解是,你只需要编写你的语言接受的所有东西,而且只写那个。

一般情况下,只需浏览一些来自不同网站的不同语言的EBNF,了解它们的外观,然后做适合自己的事情。