https://en.wikipedia.org/wiki/Extended_Backus\xe2\x80\x93Naur_form
\n\n上面的文章提到,大括号表示重复任意次(包括零次),而方括号表示最多重复一次。
\n\n然而,我想要的是至少一次重复 - 也就是说,终端或非终端必须至少出现一次。
\n\n好吧,我可以这样描述:
\n\nproduction = nonterminal, { nonterminal };\nRun Code Online (Sandbox Code Playgroud)\n\n但我认为 EBNF 相对于 BNF 的意义在于避免这种“黑客”的需要。
\n\n维基百科文章还提到:
\n\n\n\n\n除其他外,EBNF 还提供了描述重复(指定次数)、排除产生式的某些部分以及在 EBNF 语法中插入注释的语法。
\n
但是 EBNF 是否提供了描述至少一次重复的语法?
\n在最后一个大括号后面放置一个减号(例外符号)。
\n\nproduction = { nonterminal }-;\nRun Code Online (Sandbox Code Playgroud)\n\nISO/IEC 14977:1996(E)
\n\n\n\n\n5.8 句法术语
\n\n当句法术语是单个句法因素时,它表示由该句法因素表示的任何符号序列。
\n\n当句法术语是一个句法因子,后跟一个 except-符号,后跟一个句法异常时,它表示满足这两个条件的任何符号序列:
\n\na) 它是由句法因子表示的符号序列,
\n\nb) 它不是由句法异常表示的符号序列。
\n\n作为示例,以下语法规则说明了 except 符号提供的功能。
\n\n字母=“A”| “B”| “C”| “D”| “E”| “F”
\n\n
\n | “G”| “H”| “我”| “J”| “K”| “L”| “M”
\n| “N”| “哦” | “P”| “问”| “R”| “S”| “T”
\n| “你”| “V”| “W”| “X”| “是” | “Z”;
\n 元音 = "A" | “E”| “我”| “O”|“U”;
\n 辅音 = 字母 - 元音;
\n ee = {"A"}-, "E";这些规则定义的终端字符串如下:
\n\n字母:ABCDEFGHIJ 等
\n\n
\n 元音:AEIOU
\n 辅音:BCDFGHJKLM 等
\n ee:AE AAE AAAE AAAAE AAAAAE 等注意 \xe2\x80\x94 {"A"}- 表示一个或多个 A\xe2\x80\x99 的序列,因为它是一个具有空语法异常的语法术语。
\n
请注意,在第二段中(添加了强调),满足两个条件。也就是说,必须同时满足句法因素和句法例外。大括号仍然意味着重复。这会导致一个或多个满足语法的情况,即使异常为空。
\n