おもちゃの文法を指定するための単純なファイルが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* )?
しかし、rascal によって解析エラーとして拒否されました。
syntax B = ( C C C* )? ;
syntax B = ( C | C* )? ;
syntax B = C | C C* ;
問題なく受け入れられます。誰かが私が間違っていることを説明できますか?