#antlr4
#antlr4
Вопрос:
Мне нужно реализовать грамматику для языка шаблонов, это будет что-то вроде этого
TEXT: ... // something except '{{' '}}' NOT_A_TEXT: '{{' ... '}}';
Проблема в том, что в тексте допускаются разделенные фигурные скобки, поэтому,
{ something inside }
будет текст
Как это реализовать?
Ответ №1:
Вы могли бы попробовать что-то вроде этого:
TEXT : TEXT_ATOM ; NOT_A_TEXT : '{{' .*? '}}' ; fragment TEXT_ATOM : '{' ~'{' // a '{' followed by something other than '{' | '}' ~'}' // a '}' followed by something other than '}' | ~[{}] // something other than '{' and '}' ;
Но сопоставляя {{ ... }}
в лексере, разве вы не теряете много информации? Разве вам не нужно разобрать все, что находится внутри {{
и }}
? Когда вы сопоставляете его как единый токен, вы не можете легко извлечь какую-либо информацию о том, что внутри него.