Пишу грамматику antlr4 и хочу подсчитать количество токенов внутри правила

У меня есть грамматика со следующим правилом -> глагол и глагол имеет 3 значения токена получить, положить изменить см. ниже. если бы я должен был прочитать файл, содержащий более 3 глаголов (получить, поставить и изменить), я бы хотел, чтобы синтаксический анализатор напечатал сообщение об ошибке. Было бы лучше, если бы это было встроено в прослушиватель, или есть изящный способ сделать это внутри грамматики?

Есть ли способ, например, подсчитать значения токенов внутри глагола?

    verb    : 
       GET    |   
       PUT    |   
       CHANGE    ;

person killio    schedule 16.09.2013    source источник


Ответы (1)


Если я понимаю, о чем вы спрашиваете, это ограничит ввод не более чем тремя глаголами. Это немного глупо и плохо масштабируется, но в зависимости от того, что вы пытаетесь сделать, это может сработать для вас:

grammar Verb;

verb
 : option option? option? EOF
 ;

option
 : GET
 | PUT
 | CHANGE
 ;

GET    : 'get';
PUT    : 'put';
CHANGE : 'change';

SPACE
 : [ \t\r\n] -> skip
 ;

Если вам нужно что-то более общее, ознакомьтесь с этим ответом SO: Есть ли в ANTLR сокращенное обозначение для выражения чередования всех перестановок некоторого набора правил? с использованием предикатов. Однако он был написан для ANTLR 3.

person Jeff French    schedule 20.09.2013