比方说,我们在解析令牌时有一条规则指定:
x -> [y[,y]*]
括号中的[[]]表示其中的任何内容都是可选的,以便规则生效,*表示0或更大。 例如,可能是:
x : (empty)
OR
x : y
OR
x : y,y
也是如此(上面的示例是激活“ x”规则的输入示例,而不是代码的示例)
我已经尝试了以下可行的方法
x : y commaY
|
;
commaY : COMMA y commaY
|
;
我想知道上面的替代选项,如果有的话,它可以用于教育目的。
谢谢。
答案 0 :(得分:1)
EDIT我先前的答案不正确(如注释中所指出),但是我无法删除一个可接受的答案,因此我决定对其进行编辑。
x -> [y[,y]*]
至少需要2条规则。这是另一种可能性:
x
: list
| /* eps */
;
list
: list ',' y
| y
;