我对 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:解析“类路径:/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';