ID で構成される関数呼び出しと、ドットで区切られた関数呼び出し (Java のような構文)を認識するために、Xtext に単純な文法を実装しようとしています。つまり、ID や関数で構成され、常に関数で終了するチェーンです。
ソースコードの例:a.b(a).c(b()).b.d();
私は次の Xtext 文法を書きました:
Test: Chain ';';
Chain: (IdOrFunc '.')* ID Func;
IdOrFunc: ID Func?;
Func: '(' IdOrFunc? ')';
ただし、Xtext で言語コードを生成しようとすると、次のエラーが発生します。
[fatal] rule ruleChain has non-LL(*) decision due to recursive rule invocations reachable from alts 1,2. Resolve by left-factoring or using syntactic predicates or using backtrack=true option.
ルールをに置き換えるID
と、文法が機能し始めます。Chain
'xyz'
Chain: (IdOrFunc '.')* 'xyz' Func;`
私は何を間違っていますか?