2016-02-10 2 views
1

Я хотел бы собрать грамматику для определения альтернатив для событий.ANTLR обозначают гетерогенные альтернативы?

Этот

time: 
      type='at ' date 
     | type='before ' date 
     | type='vor ' date 
    ; 


    date: 
     SIMPLEDATE 
    ; 

    DAY: ('0'[1-9]|[12][0-9]|'3'[01]); 
    MONTH: ('0' [1-9]|'1'[012]); 
    YEAR: [0-2] [890] NUMBER NUMBER; 
    SIMPLEDATE: DAY [- /.] MONTH [- /.] YEAR; 

, кажется, работает хорошо.

Но я хотел бы сократить первую альтернативы так:

time: 
      type='' date 
     | type='before' date 
     | type='after' date 
    ; 

Я попробовал пустую строку, потому что типа не не принимаются.

С этой модификацией простая дата больше не признается.

Есть ли способ обозначить (гетерогенный) более согласованный?

ответ

1

Да. Просто не предоставляйте ярлык в неквалифицированной альтернативе. Antlr будет генерировать переменную токена type в контексте time; для неквалифицированной альтернативы значение Token type будет null.

Или лучше:

time: type=('before'|'after')? date ; 
+0

Это здорово: спасибо! – Mike75

Смежные вопросы