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: \'/#\' -> \'#/\'
    

要回复问题请先登录注册