У меня есть некоторые данные, которые необходимо проанализировать. Я использую ANTLR4 инструмент для автоматической генерации Java парсеров и лексических, что я могу использовать для формирования структурированных данных из входных данных, приведенные ниже Грамматика:ANTLR4 грамматика не ведет себя так, как ожидалось
grammar SUBDATA;
subdata:
data+;
data:
array;
array:
'[' obj (',' obj)* ']';
intarray:
'[' number (',' number)* ']';
number:
INT;
obj:
'{' pair (',' pair)* '}';
pair:
key '=' value;
key:
WORD;
value:
INT | WORD | intarray;
WORD:
[A-Za-z0-9]+;
INT:
[0-9]+;
WS:
[ \t\n\r]+ -> skip;
испытаний Входные данные:
[
{OmedaDemographicType=1, OmedaDemographicId=100, OmedaDemographicValue=4},
{OmedaDemographicType=1, OmedaDemographicId=101, OmedaDemographicValue=26},
{
OmedaDemographicType=2, OmedaDemographicId=102, OmedaDemographicValue=[16,34]
}
]
Ouput :
line 5:79 mismatched input '16' expecting INT
line 5:82 mismatched input '34' expecting INT
Parser не работает, хотя у меня есть целочисленное значение в указанной выше ожидаемой позиции.
Спасибо за ответ. Я думал, что порядок лексерских токенов в правиле парсера имеет значение для матча. Я думал больше в регулярном выражении, игнорируя тот факт, что первые лексические жетоны генерируются перед согласованием самого правила парсера. –
В дополнение к ответу Лукаса: если вы видите, что неожиданное поведение при разборе всегда начинает их решать, глядя на токены, созданные лексером , Это показало бы вам, что последовательность токенов отличается от ожидаемой. –