мне нужно разобрать следующиеANTLR внутри скобок
model {
// any content, including brackets {}
var x= {} ;
// any content, including brackets {}
}
Если я делаю это так:
model : MODEL OBR modelBody CBR;
modelBody: modelBodyLine;
modelBodyLine: TEXT* (OBR TEXT* CBR)* TEXT*;
TEXT : ('a'..'z'|'A'..'Z'| '_' | '-')+ ;
OBR: '{';
CBR: '}';
Я получаю эту ошибку
предупреждение (200):/SWL Parser/src/ro/sft/swl/language/parser/SWL.g: 46: 16: Решение может соответствовать вводу, например «ТЕКСТ», с использованием нескольких альтернатив: 1, 2 В результате альтернативы (2) были отключены для этого входа | ---> modelBodyLine: ТЕКСТ * (ОБР ТЕКСТ * ЦБР) * ТЕКСТ *;
Так что было бы лучшим способом разобрать его?
Спасибо за ответ. Проблема в том, что если я пытаюсь разобрать что-то вроде 'model {some text}', то он переходит в бесконечный цикл. Грамматика такова: 'model: MODEL modelBody; модельBody: genericBlock; genericBlock : ОБР (~ (ОБР | CBR) | genericBlock ) * CBR ; '. Надеюсь, вы сможете обнаружить проблему :) – victor
другой шаблон, который вызывает бесконечный цикл: 'model {var cv =; } ' – victor
У вас есть правило lexer, которое может соответствовать пустой строке (например,' WS: '\ t' *; ', когда это должно быть' WS: '\ t' +; ') * и * у вас есть некоторые ввод, который соответствует правилу * no * lexer. –