Как создать токен в файле antlr4 lexer g4 для IF () THEN ab c ELSEIF () THEN xyz ElSE yzx ENDIF - PullRequest
0 голосов
/ 06 марта 2020

Проблема в том, что я написал файл лексера и создал токен как

IF_EXPR : 'IF';
ELSEIF_EXPR : 'ELSEIF';
THEN_EXPR : 'THEN';
ELSE_EXPR : 'ELSE'

Но в некоторых случаях у меня может быть какая-то строка, содержащая 'IF' в блоке условий или в стороне THEN блок. и он рассматривает 'IF' в строке как токен.

Пример:

IF abc=1 
THEN 
   xyzIF=3
ELSE 
   abc=2
ENDIF

В приведенном выше примере мой лексер обрабатывает 'IF' в xyzIF как токен IF_EXPR но он должен рассматривать xyzIF как один другой токен.

1 Ответ

1 голос
/ 06 марта 2020

Вы должны определить правило IDENTIFIER, которое будет соответствовать xyzIF:

// Keywords first!
IF : 'IF';

// After keywords, define something that matches an identifier:
IDENTIFIER : [a-zA-Z_] [a-zA-Z_0-9]*;
...