antlr parse xml потерянное совпадение токена или дублированное совпадение

Я новичок в ANTLR и пытаюсь следовать грамматике в ANTLRWorks1.4.3.

grammar TextGra;
element :   starttag (element)* endtag
;
starttag:   '<' TAGNAME '>';
endtag  :   '</' TAGNAME '>';
TAGNAME :   ('a'..'z')|('A'..'Z')|('0'..'9');
WS  :   (' '|'\r'|'\n')+ {skip();} ;

когда попробуйте разобрать простой фрагмент XML, как это

<a><b><c></c></b></a>

потерял два последних элемента endtag, как справиться с этой ситуацией? или это неправильный путь? Имя тега не может быть ограничено в моей ситуации. Сравните с другим кодом синтаксического анализа xml. или грамматика может использовать $0 для ссылки на предыдущий сопоставленный токен?(как в регулярном выражении). В этой ситуации определите тэг в конце тега по предыдущему совпадающему тегу запуска. Спасибо всем за ответ!

1 ответ

Я предполагаю, что вы используете интерпретатор ANTLRWorks: нет, он глючит. Всегда используйте отладчик, включенный в ANTLRWorks (нажмите CTRL+D, чтобы запустить отладчик).

Я не изменил вашу грамматику или ввод, и это то, что произвел переводчик:

И отладчик произвел это:

Другие вопросы по тегам