我在使用xtext时遇到了一个大问题,我真的不知道如何解决它,因此我正在使用的一小部分语法:
typename:
IDENTIFIER=IDENTIFIER | qualified_ident=qualified_ident
;
qualified_ident:
packagename "." IDENTIFIER
;
packagename:
IDENTIFIER
;
terminal IDENTIFIER:
LETTER (LETTER | DECIMAL_DIGIT)*
;
terminal LETTER:
'a' .. 'z' | 'A' .. 'Z' | "_"
;
terminal DECIMAL_DIGIT:
'0' .. '9'
;
在Eclipse上出现错误:
error(211): ../org.xtext.example.mydsl/src-
gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDsl.g:7253:2:
[fatal] rule ruletypename 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.
它说语法已经递归了,但我看不到,也不知道如何解决。我在整个语法上都遇到这样的问题,但是我相信,如果有人向我解释如何解决这一问题,我会找出其余的问题。
更新:您可以看到整个语法here
答案 0 :(得分:0)
您可以按以下步骤更改工作流程
language = StandardLanguage {
name = "org.xtext.example.mydsl2.MyDsl"
...
parserGenerator = {
debugGrammar = true
}
}
然后使用ANTLRworks版本3x找出左递归在哪里