Coding style 编写好的EBNF语法的技巧

Coding style 编写好的EBNF语法的技巧,coding-style,context-free-grammar,ebnf,Coding Style,Context Free Grammar,Ebnf,我正在为文档解析编写一些扩展的Backus–Naur形式语法。关于这些定义的语法有很多优秀的指南,但是关于如何设计和构造它们的在线指南却很少 有人能推荐一些好文章(或一般技巧)来说明你喜欢如何写这些文章吗?因为即使最终的解析树是等效的,也似乎有一种风格元素 e、 g.例如: 决定是显式标记换行符,还是将其视为空白 非终端的命名方案 在长定义中处理可选空格 什么时候使用错误的语法检查,而不是让它们不匹配 谢谢,你应该朝着你最喜欢的方向工作——自下而上、自上而下或“三明治”(两者都做一点,在中间

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

有人能推荐一些好文章(或一般技巧)来说明你喜欢如何写这些文章吗?因为即使最终的解析树是等效的,也似乎有一种风格元素

e、 g.例如:

  • 决定是显式标记换行符,还是将其视为空白
  • 非终端的命名方案
  • 在长定义中处理可选空格
  • 什么时候使用错误的语法检查,而不是让它们不匹配

谢谢,

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

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

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


一般来说,只要看看来自不同网站的一些不同语言的EBNF,了解它们的外观,然后做你觉得合适的事情。

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

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

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

一般来说,只要看看来自不同网站的一些不同语言的EBNFs,了解它们的外观,然后做你觉得合适的事情