Когда я обновился с Antlr 3 до Antlr 4, я удалил все синтаксические предикаты в грамматике. Но когда я изменил его, я получаю сообщение об ошибке, как упоминалось в названии.Ошибка - действие в правиле lexer «xxxx» должно быть последним элементом одного внешнего внешнего.
Это измененный код
NUMBER
:(
'0'..'9' ('.' '0'..'9'+)?
| '.' '0'..'9'+
)
(
E
(
M { $type = EMS; }
| X { $type = EXS; }
)
| P
(
X
| T
| C
)
{ $type = LENGTH; }
| C M { $type = LENGTH; }
| M
(
M { $type = LENGTH; }
| S { $type = TIME; }
)
| I N { $type = LENGTH; }
| D E G { $type = ANGLE; }
| R A D { $type = ANGLE; }
| S { $type = TIME; }
| K? H Z { $type = FREQ; }
| IDENT { $type = DIMENSION; }
| '%' { $type = PERCENTAGE; }
| // Just a number
)
;
Это ошибка я получаю.
Я увидел ответ на этот вопрос here
. Но я не мог понять, что это значит. Пожалуйста, дайте мне несколько советов.
EDIT: появляется
же здесь ошибка в грамматике.
fragment INVALID :;
STRING : '\'' (~('\n'|'\r'|'\f'|'\''))*
(
'\''
| { $type = INVALID; }
)
| '"' (~('\n'|'\r'|'\f'|'"'))*
(
'"'
| { $type = INVALID; }
)
;
Мне не удалось изменить это на ANTLR 4. Что нового в этом коде? Пожалуйста, дайте мне быстрое решение для этого.
Еще раз спасибо за большую помощь. Я снова поражен той же ошибкой, но с той же ошибкой. Как я могу разрешить это с помощью нового синтаксиса. –