Я пытаюсь написать очень простую грамматику Xtext для языка freemarker. Я не могу совместить любой текст между известными тегами.Xtext-грамматика, которая соответствует любому входу между определенными тегами xml
Моя грамматика до сих пор:
grammar org.github.FreemarkerEditor with org.eclipse.xtext.common.Terminals
generate freemarkerEditor "http://www.github.org/FreemarkerEditor"
Freemarker:
elements+=Element*;
Element: Tag|Print|Comment|Text;
Print:value=PRINT_CONTENT;
Tag:open=TAG_OPEN elements+=Element* TAG_CLOSE;
Text: text+=ANY_OTHER+;
Comment: text=COMMENT_CONTENT;
terminal PRINT_START_FRAGMENT:'${';
terminal PRINT_CONTENT:PRINT_START_FRAGMENT->'}';
terminal COMMENT_START:'<#--';
terminal COMMENT_CONTENT:COMMENT_START->'-->';
terminal TAG_START_FRAGMENT:'<#';
terminal TAG_OPEN:TAG_START_FRAGMENT->'>';
terminal TAG_CLOSE_START:'</#';
terminal TAG_CLOSE:TAG_CLOSE_START->'>';
Он должен работать так: Есть 4 типа элементов, которые могут возникнуть в любом порядке и количестве в документе. Теги Freemarker, которые всегда начинаются с <#tag some text and functions called>
</#tag>
, которые могут содержать любые элементы. Комментарии, которые должны содержать весь текст между игнорированием чего-либо там: <#-- Comment -->
. Существуют также простые операторы печати, которые выглядят следующим образом: ${some variable or method call}
. Все остальное, даже обычные теги xml или фигурные скобки, должны быть непроверенным текстом.
Проблема в моей грамматике, по-видимому, в том, что она не может соответствовать тексту где угодно. Пример ввод
${hallo.welt}
mhh
<#list something as somethingElse>${aha haha} some text </#list>
показывает ошибку при mhh
о том, что EOF отсутствует. Как мне изменить грамматику для работы, как ожидалось?
В этом была проблема. Похоже, потому, что у него была возможность создать столько текстовых элементов, сколько захотелось, это не соответствовало. Благодарю. Теперь я могу создать более чистую версию грамматики. – user1264614