【问题标题】:How can I create a goto expression in xtext?如何在 xtext 中创建 goto 表达式?
【发布时间】:2021-11-27 15:24:31
【问题描述】:

我想创建一个goto表达式如下

//label
 <bb 2> :

//goto
goto <bb 2>;

以下语法适用于简单 ID。我不知道如何引用&lt;ID INT&gt; 在 goto 表达式中。

Goto returns Goto:
    {Goto}
    'goto' goto+=[Label]  ';'
;

LabelDef returns LabelDef:
    {LabelDef}
    label+= Label ':'
    ;

Label returns Label:
    {Label}
    name= ID
    ;

你知道怎么做吗?

【问题讨论】:

    标签: eclipse grammar dsl xtext go-to-definition


    【解决方案1】:

    您正在寻找的功能是 DataType 规则

    Goto returns Goto:
        {Goto}
        'goto' goto+=[Label|IDandINT]  ';'
    ;
    
    LabelDef returns LabelDef:
        {LabelDef}
        label+= Label ':'
        ;
    
    Label returns Label:
        {Label}
        name= IDandINT
        ;
    IDandINT: ID INT;
    

    您还可以为数据类型规则引入/自定义 DefaultTerminalConverters/IValueConverter 以规范空格

    【讨论】:

    • 感谢您的回答,由于 xtext,在生成时我没有得到我想要的结果。我在创建一个新项目时发现了这一点。以下子语法可以正常工作。 Goto returns Goto: {Goto} 'goto' goto = [Label|QualifiedName] ';' '[INV]' ; LabelDef returns LabelDef: {LabelDef} name = Label ; Label returns Label: {Label} name = QualifiedName ':' ; QualifiedName: '&lt;' ID INT '&gt;' ;
    【解决方案2】:

    我认为您想要一个本质上是“ID INT”的终端,然后使用它来交叉引用您的标签。 我认为这将是很多工作,只是为了能够在标签中允许“空格”。为什么不简单地依赖终端“ID”,用户可以根据需要将其命名为“bb2”?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多