https://en.wikipedia.org/wiki/Extended_Backus–Naur_form
以上文章提到花括号表示任意次重复(包括零),而方括号表示最多重复1次。
但是我想要的是至少重复一次-也就是说,一个终端或一个非终端必须至少出现一次。
我可以这样描述它:
production = nonterminal, { nonterminal };
但是我认为EBNF优于BNF的目的是避免这种“ hacks”的需要。
Wikipedia文章还提到:
除其他事项外,EBNF还提供了语法来描述(指定次数)重复,排除部分生成内容并在EBNF语法中插入注释。
但是EBNF是否提供描述至少一个重复的语法?
答案 0 :(得分:1)
在最后一个花括号后放置一个减号(符号除外)。
production = { nonterminal }-;
ISO / IEC 14977:1996(E)
5.8语法术语
当句法术语是单个句法因素时,它代表任何 该句法因子表示的符号序列。
当句法术语是句法因素后跟一个 除符号后跟语法异常,它表示任何 满足两个条件的符号序列:
a)它是由句法因子表示的符号序列,
b)它不是由 句法例外。
作为示例,以下语法规则说明了这些功能 由例外符号提供。
字母=“ A” | “ B” | “ C” | “ D” | “ E” | “ F”
| “ G” | “ H” | “我” | “ J” | “ K” | “ L” | “ M”
| “ N” | “ O” | “ P” | “ Q” | “ R” | “ S” | “ T”
| “ U” | “ V” | “ W” | “ X” | “ Y” | “ Z”;
元音=“ A” | “ E” | “我” | “ O” |“ U”;
辅音=字母-元音;
ee = {“ A”}-,“ E”;这些规则定义的终端字符串如下:
字母:A B C D E F G H I J等。
元音:A E I O U
辅音:B C D F G H J K L M等。
ee:AE AAE AAAE AAAAE AAAAAE等。注意— {“ A”}-代表一个或多个A的序列,因为它是一个 空句法例外的句法项。
请注意,在第二段中(强调),满足两个条件。也就是说,必须同时满足 syntactic-factor 和 syntactic-exception 。大括号仍然意味着重复。即使异常为空,也会导致一个或多个满足语法要求。