如何解决XText:使用自定义终端定义
| 我对XText完全陌生。 当您使用XText定义语法时,您可以指定第二个语法,并使用它所声明的定义,如下所示:grammar org.eclipse.xtext.example.Domainmodel with org.eclipse.xtext.common.Terminals
在Xtext中,每个语法都有唯一的
名称,类似于公共Java类
需要反映出
Java类路径中的文件。在我们的
如果语法文件位于
/org/eclipse/xtext/example/Domainmodel.xtext
因此语法名称是
org.eclipse.xtext.example.Domainmodel。
该声明的第二部分(
与
org.eclipse.xtext.common.Terminals)
指出,该语法重用了
覆盖指定的规则
语法。的
org.eclipse.xtext.common.Terminals是
Xtext附带的库语法
并预先定义最常见的
终止规则
我正在开发XText插件,我想在一个单独的文件中定义自己的终端符号。可能吗?我怎样才能做到这一点?
我试图创建一个新的Xtext文件,并将其附加到org.eclipse.xtext.common.Terminals之后,并仅添加我的文件,但两种解决方案都无法编译。
谢谢。
编辑
如果我在同一项目中使用两个xtext文件,一个用于语法,一个用于语法的终端,则在启动mwe2文件时会出现以下异常:
java.lang.IllegalStateException:
问题解析
\'classpath:/org/xvr/language/sh/ShaderDsl.xtext \':[XtextLinkingDiagnostic:
null:1无法解析对
语法
\'org.xvr.language.sh.ShTerminal \',,
XtextLinkingDiagnostic:null:9
无法解析对
AbstractRule \'ID \'。,
TransformationDiagnostic:null:14
无法创建数据类型为INVARIANT
(错误代码:NoSuchTypeAvailable),
TransformationDiagnostic:null:17
无法创建数据类型PRECISION
(错误代码:NoSuchTypeAvailable),
TransformationDiagnostic:null:19
无法创建数据类型HIGH_PRECISION
(错误代码:NoSuchTypeAvailable),
TransformationDiagnostic:null:20
无法创建数据类型
MEDIUM_PRECISION(错误代码:
NoSuchTypeAvailable),
TransformationDiagnostic:null:21
无法创建数据类型LOW_PRECISION
(错误代码:NoSuchTypeAvailable)]
这两个xtext文件是:
语法
grammar org.xvr.language.sh.ShaderDsl with org.xvr.language.sh.ShTerminal //org.eclipse.xtext.common.Terminals
generate shaderDsl \"http://www.xvr.org/language/sh/ShaderDsl\"
....
和语法的终端
grammar org.xvr.language.sh.ShTerminals with org.eclipse.xtext.common.Terminals
generate shTerminals \"http://www.xvr.org/language/sh/ShTerminals\"
terminal Test : \'test\';
解决方法
您有很多选择(在线帮助中都有所有选择):
在您当前正在使用的语法中定义您的终端规则。
为终端符号创建一个新的专用语法,类似于我们对common.Terminals所做的操作。使用那个而不是通用终端。
为终端符号创建一个新的专用语法,重新使用通用语法。该语法中的终端,并使用您自己的实际语言终端语法。
我建议您仅覆盖要在其语言中直接更改的终端(选项1),或者如果您想使用我要使用的同一组终端定义多种语言(选项3)或将这两个选项组合使用,例如
grammar org.mycompany.MyTerminals with org.eclipse.xtext.common.Terminals
terminal ID: (\'a\'..\'z\'|\'A\'..\'Z\'|\'_\') (\'a\'..\'z\'|\'A\'..\'Z\'|\'_\'|\'0\'..\'9\')*;
terminal SL_COMMENT: \'--\' !(\'\\n\'|\'\\r\')* (\'\\r\'? \'\\n\')?;
==
grammar org.mycompany.MyLanguage with org.mycompany.MyTerminals
MyModel: name=ID other=ANOTHER;
terminal ANOTHER: \'/#\' -> \'#/\'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。