为编译器实现特定解析规则的不同方法
Different methods of implementing a specific parsing rule for a compiler
假设我们在解析标记时有一个规则指定:
x -> [y[,y]*]
方括号“[ ]”表示其中的任何内容都是可选的,以便规则生效,* 表示 0 或更多。
例如它可以是:
x : (empty)
OR
x : y
OR
x : y,y
以及等等(以上是 'x' 规则将被激活的输入示例,而不是代码应该如何)
我已经尝试了以下有效的方法
x : y commaY
|
;
commaY : COMMA y commaY
|
;
我想知道上面的替代选项,如果有的话,可以用于教育目的。
提前致谢。
编辑我之前的回答不正确(正如评论中指出的),但我无法删除已接受的答案,所以我决定编辑它。
x -> [y[,y]*]
需要(至少)2 条规则。这是另一种可能性:
x
: list
| /* eps */
;
list
: list ',' y
| y
;
假设我们在解析标记时有一个规则指定:
x -> [y[,y]*]
方括号“[ ]”表示其中的任何内容都是可选的,以便规则生效,* 表示 0 或更多。 例如它可以是:
x : (empty)
OR
x : y
OR
x : y,y
以及等等(以上是 'x' 规则将被激活的输入示例,而不是代码应该如何)
我已经尝试了以下有效的方法
x : y commaY
|
;
commaY : COMMA y commaY
|
;
我想知道上面的替代选项,如果有的话,可以用于教育目的。
提前致谢。
编辑我之前的回答不正确(正如评论中指出的),但我无法删除已接受的答案,所以我决定编辑它。
x -> [y[,y]*]
需要(至少)2 条规则。这是另一种可能性:
x
: list
| /* eps */
;
list
: list ',' y
| y
;