我正在尝试在 Xtext 中实现一个简单的语法来识别由 ID 和函数调用组成的函数调用,这些函数调用由一个点分隔(类似 Java 的语法)。即任何由 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;`
我究竟做错了什么?