Приоритеты правил Antlr

Во-первых, я знаю, что эта грамматика не имеет смысла, но она была создана для проверки поведения приоритета правила ANTLR

grammar test;

options 
{

output=AST;
backtrack=true;
memoize=true;

}

rule_list_in_order :
    (
    first_rule
    | second_rule
    | any_left_over_tokens)+
    ;


first_rule
    :
     FIRST_TOKEN
    ;


second_rule:     
    FIRST_TOKEN NEW_LINE SECOND_TOKEN NEW_LINE;


any_left_over_tokens
    :
    NEW_LINE
    | FIRST_TOKEN
    | SECOND_TOKEN;



FIRST_TOKEN
    : 'First token here'
    ;   

SECOND_TOKEN
    : 'Second token here';

NEW_LINE
    : ('\r'?'\n')   ;

WS  : (' '|'\t'|'\u000C')
    {$channel=HIDDEN;}
    ;

Когда я даю этой грамматике ввод «Первый токен здесь \ nВторой токен здесь», он соответствует второму правилу.

Я ожидал, что оно будет соответствовать первому правилу, а затем any_left_over_tokens, потому что first_rule появляется перед вторым правилом в rule_order_list, который является начальной точкой. Кто-нибудь может объяснить, почему это происходит?

Ура

7
задан probably at the beach 4 February 2011 в 15:11
поделиться