【发布时间】:2013-05-20 02:27:15
【问题描述】:
我在 rascal 中有一个用于指定玩具语法的简单文件
module temp
import IO;
import ParseTree;
layout LAYOUT = [\t-\n\r\ ]*;
start syntax Simple
= A B ;
syntax A = "Hello"+ ("joe" "pok")* ;
syntax A= "Hi";
syntax B = "world"*|"wembly";
syntax B = C | C C* ;
public void main () {
println("hello");
iprint(parse(#start[Simple], "Hello Hello world world world"));
}
这很好,但是问题是我不想写
syntax B = C | C C* ;
我想写
syntax B = ( C | C C* )?
但它被流氓拒绝为解析错误-即使所有
syntax B = ( C C C* )? ;
syntax B = ( C | C* )? ;
syntax B = C | C C* ;
接受很好。谁能向我解释我做错了什么?
【问题讨论】:
-
ps,您的布局定义会导致歧义,请添加跟随限制来解决此问题。