В качестве примера, скажем, я хочу проанализировать в основном неструктурированный текст с одним элементом разметки, двойной звездой **
. Это моя грамматика ANTLR:
text : (plain | tag)+ ;
plain : ~(TAG) ;
tag : TAG tag_inner TAG ;
tag_inner : ~(TAG) ;
TAG : '**' ;
TEXT : ('a'..'z' | ' ' | '.')+ ;
Эта грамматика прекрасно работает, если синтаксически правильный текст, который я анализирую, то есть для каждого открытия **
есть закрытие **
. Если есть нечетное число **
с, ANTLR жалуется и выдает ошибки.
Как можно это исправить, чтобы ANTLR смотрел вперед на замыкающуюся двойную звезду, и если никто не рассматривал эту одиночную двойную звезду как обычный текст? Я почти уверен, что ANTLR может сделать это, и что синтаксические / семантические предикаты - это ответ, но после того, как мы потратили много времени на чтение документов, я все еще не могу разобраться.