我在流氓中有一个简单的文件,用于指定玩具语法
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* ;
接受罚款。谁能向我解释我做错了什么?