ANTLR4 как добавить текст, кроме «{{» и «}}»?

#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 '}'  ;  

Но сопоставляя {{ ... }} в лексере, разве вы не теряете много информации? Разве вам не нужно разобрать все, что находится внутри {{ и }} ? Когда вы сопоставляете его как единый токен, вы не можете легко извлечь какую-либо информацию о том, что внутри него.