【发布时间】:2016-03-24 16:03:31
【问题描述】:
我的意思是像
LISTOF(EL) := "[" EL ("," EL)* "]"
LISTNUM := LISTOF(NUMBER)
LISTID := LISTOF(IDENT)
所以,有定义
NUMBER := ('0'-'9')*
IDENT := ('a'-'z'|'A'-'Z')*
我们有关注
[435,657,44] 是LISTNUM 的示例,
[dsf,thg,ewre] 是LISTID 的示例。
或者另一个例子(e表示空字符串)
A(0) := e
A(n) := "a" A(n-1) | e
所以,A(5) 是由长度不超过 5 的 'a' 组成的所有字符串的集合
是否有任何科学著作描述了类似的东西?我们可以这样描述我们的语法并且仍然能够在可接受的时间内解析它吗?
【问题讨论】:
-
你当然可以这样做。一种简单的方法是将参数化的 BNF 规则视为宏,然后将它们简单地扩展为传统的 BNF。问题是应该你这样做吗?额外的表现力在实践中能给你带来什么吗?我已经建立了很多语法;我不这么认为。 YMMV。
标签: parsing computer-science bnf ebnf