0

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

//label
 <bb 2> :

//goto
goto <bb 2>;

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

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

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

Label returns Label:
    {Label}
    name= ID
    ;

你知道怎么做吗?

4

2 回答 2

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 以规范空白

于 2021-11-30T14:15:56.777 回答
0

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

于 2021-11-30T09:55:53.843 回答