1

これは文法の例です:

文法 org.xtext.example.mydsl.MyDsl と org.eclipse.xtext.common.Terminals

myDsl を生成する "http://www.xtext.org/example/mydsl/MyDsl"

START: elem += DOG ;

犬: '犬' INT ';' ;

端末 CAT : ('A'..'Z')('A'..'Z')('A'..'Z')''('0'..'9')+;

Xtext が行:DOG 1234を見ると、解決できず、「不一致入力 DOG 1234... 期待する DOG」というようなエラーが発生します。Xtext がキーワードに遭遇した場合、端末よりも優先順位を高くする必要があると考えました。でも混んでいるようです。どうすればこれを修正できますか?

DOG と CAT は別の場所で使用されていることに注意してください (つまり、終端の CAT は他のルールで使用されていますが、その定義は DOG ルールと競合しています)。

4

1 に答える 1

2

この状況では、ご覧のとおり、エラーは「Expection CAT_RULE ..」ではありません。したがって、 DOG1234 を要素として記述すると、 Xtext はそれを DOG および INT として解析せず、代わりに 'DOG1234' を String として取得し、次に DOG ルールを探します。もちろん、DOG ルールは "DOG" キーワードのみを許可します。

たとえば、DOG を CAT ルールの後に別のターミナル ルールとして定義し、要素 RAT が CAT RULE と「競合」し、改行を使用してその INT 値をキーワードから分離すると、それらすべてが機能することがわかります。

    START: elem += DOG 
    catelem += CAT 
    ratelem += RAT;

    RAT:
        "RAT"INT";"
    ;



terminal CAT : ('A'..'Z')('A'..'Z')('A'..'Z')' '('0'..'9')+;
terminal DOG : "DOG"("0".."9")+";";

そして、新しい DSL の例の使用法:

DOG1234;
CSA 1 
RAT
12347
;
于 2012-08-27T13:07:11.343 に答える