Antlr4语法不贪婪不会停止匹配

时间:2014-02-03 08:37:40

标签: antlr antlr4

我有这个语法:

grammar Test;

startnode
:
    BEGIN PART_A

    (
    dont_care |
    care
    )*

    END PART_A EOF
;

dont_care
:
    BEGIN I_DONT_CARE

    .*?

    END I_DONT_CARE
;

care
:
    BEGIN CARE

    VALUE STRING

    END CARE
;

BEGIN : '/begin';
END : '/end';
PART_A : 'PART_A';
I_DONT_CARE : 'I_DONT_CARE';
CARE : 'CARE';
VALUE : 'VALUE';
STRING : '"' .*? '"';
WS : ( ' ' | '\t' | '\r' | '\n')+ -> skip;

以下输入:

/begin PART_A

/begin I_DONT_CARE

    something something

/end I_DONT_CARE

/begin I_CARE

    VALUE "Hello World"

/end I_CARE

/end PART_A

问题是,即使我使用了非greey运算符,dont_care规则也永远不会停止匹配。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:-1)

你需要使用词法模式。请参阅我刚刚给出的最后一个问题的书或答案;)