0

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;`

私は何を間違っていますか?

4

1 に答える 1

0

そして何について :

Test: Chain ';';
Chain: IdOrFunc ('.' ID Func)*;
IdOrFunc: ID Func?;
Func: '(' IdOrFunc? ')';

ただし、まったく同じ式を解析するかどうかは完全にはわかりませんが、ざっと見ただけです (左の再帰は (IdOrFund '.')* ステートメントにありました)。

于 2013-02-04T18:29:39.393 に答える