gpt4 book ai didi

java - Xtext 语法匹配某些 xml 标签之间的任何输入

转载 作者:行者123 更新时间:2023-12-01 22:29:45 37 4
gpt4 key购买 nike

我正在尝试为 freemarker 语言编写一个非常简单的 Xtext 语法。我无法匹配已知标签之间的任何文本。

到目前为止我的语法:

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 种类型的元素可以以任意顺序和数量出现在文档中。始终以 <#tag some text and functions called> 开头的 Freemarker 标签</#tag>其中可以再次包含任何元素。注释应包含其间的所有文本,忽略其中的任何内容:<#-- Comment --> 。还有一些简单的打印语句,如下所示:${some variable or method call} 。其他所有内容,甚至正常的 xml 标签或大括号都应该是未解析的文本。

我的语法中的问题似乎是它无法匹配任何地方的文本。示例输入

${hallo.welt} 
mhh
<#list something as somethingElse>${aha haha} some text </#list>

mhh处显示错误说明缺少 EOF。我必须如何更改语法才能按预期工作?

最佳答案

如果我生成你的语法,我会得到

warning(200): ../org.xtext.example.mydsl4/src-gen/org/xtext/example/mydsl4/parser/antlr/internal/InternalMyDsl.g:297:1: Decision can match input such as "RULE_ANY_OTHER" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input
warning(200): ../org.xtext.example.mydsl4.ui/src-gen/org/xtext/example/mydsl4/ui/contentassist/antlr/internal/InternalMyDsl.g:194:28: Decision can match input such as "RULE_ANY_OTHER" using multiple alternatives: 1, 2
As a result, alternative(s) 2 were disabled for that input

因此你的语法不明确,你应该解决这个问题,例如说文本应该尽可能多地吃掉(语法谓词)

Text: => text+=ANY_OTHER+;

还有排名更高的其他终端 ANY_OTHER例如身份证号

你也必须尊重这一点

Text: => text+=(ID|ANY_OTHER)+;

关于java - Xtext 语法匹配某些 xml 标签之间的任何输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28061591/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com