ANTLR 4过于贪婪:输入不匹配

时间:2016-05-24 11:43:14

标签: java parsing antlr antlr4

我有这个简单的语法:

shape_grammar
:
    decoration*
    start_entry
    decoration*
    //shape_rule+
;

decoration
    :
        include_statement
        | attr
        | resource
    ;

include_statement
    :
        'include' '"' PATH '"' END
    ;

attr
    :
        'attr' ATTR_TYPE IDENTIFIER ('(' INT ',' INT ')')? END
    ;

resource
    :
        RESOURCE_TYPE IDENTIFIER '"' PATH '"' END
    ;

start_entry
    :
        'start' '"' IDENTIFIER '"' END
    ;

... more rules ...

PATH
    :
        ~('"'|'\n'|'\r')+
    ;
ATTR_TYPE
    :
        'int'
        |'float'
        |'bool'
    ;
RESOURCE_TYPE
    :
        'model'
    ;


IDENTIFIER
    :
        [a-z]+
        | ([a-z][a-z_0-9]+)
    ;

输入:

include "GrammaticBasic";
attr float xxx (0, 1);
attr int yyy (2, 6);
attr float zzz (0, 1);
attr float www (0, 1);

我总是得到错误:

line 1:0 mismatched input 'include "GrammatikBasic";' expecting {'include', 'attr', 'start', 'model'}

为什么ANTLR会尝试将整条线匹配到规则的第一部分? 对我来说似乎太贪心了。

我做错了什么?

(本文是为了绕过STACKOVERFLOWS"你的问题主要是代码尝试添加一些细节"错误。)

0 个答案:

没有答案