为编译器实现特定解析规则的不同方法

问题描述 投票:1回答:1

假设我们在解析令牌时有一条规则,指定:

x -> [y[,y]*]

括号'[]'表示其中的任何内容是可选的,以便规则发生,*表示0或更多。例如,它可能是:

x : (empty) 
  OR
x : y 
  OR
x : y,y

以及(以上是'x'规则将被激活的输入示例,而不是代码应该如何)

我已经尝试了以下功能

x : y commaY
  |
  ;

commaY : COMMA y commaY
       |
       ;

我想知道上面的其他选项,如果有的话,它可以用于教育目的。

先感谢您。

parsing compiler-construction bison
1个回答
1
投票

编辑我之前的回答是不正确的(正如评论中指出的那样),但我无法删除已接受的答案,所以我决定编辑它。

你需要(至少)2条x -> [y[,y]*]规则。这是另一种可能性:

x
 : list
 | /* eps */
 ;

list
 : list ',' y
 | y
 ;
© www.soinside.com 2019 - 2024. All rights reserved.