Я узнаю о разборе/лексике в курсе об информатике. Для этого мы используем ANTLR.ANTLR: rule Токенс имеет не-LL (*) решение из-за рекурсивных правил, вызываемых из alts
Я изменяю XML-язык, поэтому он уже не является двусмысленным, но когда я вношу изменения в грамматик, ANTLR жалуется.
Я знаю, что этот конкретный вопрос был задан раньше, но это действительно не помогло!
ANTLR: rule Tokens has non-LL(*) decision due to recursive rule invocations reachable from alts 1,2
Я взял снимок ошибки, когда я бегу ANTLR из коммандос-запроса.
Вот XML-грамматика:
grammar XML;
options {
language = Java;
}
@lexer::members {
boolean inTag = true;
}
xml_file returns [TaggedElement value]
: tagged_element EOF
;
tagged_element
: start_tag element_body end_tag
;
element_body
: element
| element element_body
;
element
: data_element
| tagged_element
;
data_element
: PCDATA
;
start_tag
: OPEN_START_TAG NAME CLOSE_TAG
;
end_tag
: OPEN_END_TAG NAME CLOSE_TAG
;
OPEN_START_TAG : '<' { inTag = true; };
OPEN_END_TAG : '</' { inTag = true; };
CLOSE_TAG : '>' { inTag = false; };
NAME : {inTag}?=> ('a'..'z'|'A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9')* ;
WS : {inTag}?=> (' '|'\t'|'\r'|'\n')+ { $channel = HIDDEN; } ;
PCDATA : {!inTag}?=> (~'<')+ { setText($text.trim()); if ($text.length() == 0) $channel = HIDDEN; } ;
Проблема возникает в
element_body
который где я "фиксированный" в грамматику. Итак, мой вопрос -> Что зажимает эта грамматика, и как я могу заставить ее работать? Любая помощь очень ценится!
Это работало отлично! Благодаря! – Andersnk