用xtext左递归

时间:2018-07-12 00:24:40

标签: grammar xtext left-recursion

我在使用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

1 个答案:

答案 0 :(得分:0)

您可以按以下步骤更改工作流程

    language = StandardLanguage {
        name = "org.xtext.example.mydsl2.MyDsl"
        ...

        parserGenerator = {
            debugGrammar = true
        }
    }

然后使用ANTLRworks版本3x找出左递归在哪里