Я использую antlr4, и я пытаюсь сделать парсер для Matlab. Одна из главных проблем заключается в том, что комментарии и транспонирование используют одиночные кавычки. То, что я думал о решении, заключалось в том, чтобы определить правило lexer STRING несколько следующим образом:ANTLR4 Отрицательное обходное решение?
(if previous token is not ')','}',']' or [a-zA-Z0-9]) than match '\'' (ESC_SEQ | ~('\\'|'\''|'\r'|'\n'))* '\'
'(но обратите внимание, что я не хочу использовать предыдущий токен, если это правда).
Кто-нибудь знает обходной путь этой проблемы, поскольку он не поддерживает отрицательные образы?
Вы знаете, в любом случае, чтобы указать диапазон в семантическом предиката, например, {_input.LA (-1)! = [a-zA-Z0-9]}? –
Этот код непосредственно помещается в сгенерированный лексер (код напрямую помещается в java/your_target_language в сгенерированный лексер), поэтому я не думаю, что вы не можете использовать прямой диапазон. Однако, поскольку это Java (или ваш целевой язык), который скопирован в вашем лексере, вы можете использовать 'matches (...)' или эквивалентные функции. Однако в вашем случае использование режимов lexer должно быть более подходящим. –