0

我想为具有不同变量类型组的语言构建一个编辑器,但生成的内容助手有问题。

Type:
   'TYPE' ':' name=ID '(' type=[ANY] ')' ';'
;
ANY:
   ANY_NUM | Type
;
ANY_NUM:
   ANY_REAL | ANY_INT ...
;
ANY_REAL:
   'real' | 'float'
;
ANY_INT:
   'int' | 'sint' | 'lint'
;

这个想法是,不允许在任何地方使用特定类型,所以我想在某些情况下使用 type=(ANY_REAL) 。生成的内容助手在这里没有显示任何内容,所以我想知道这是否是指定变量类型和组的正确方法。

4

1 回答 1

0

好的。答案很简单。每个变量类型都必须在枚举(EnumRule)中定义,结构本身是一个简单的类型引用(ParserRule):

TR_Any:
  TR_AnyDerived | TR_AnyElementary
;
TR_AnyDerived:
  ...
;
TR_AnyElementary:
  TR_AnyReal | TR_AnyInt |...
;
TR_AnyReal:
  type = E_AnyReal
;
TR_AnyInt:
  type = E_AnyInt
;
enum E_AnyReal:
  FLOAT = "float" |
  DOUBLE = "double" |
  ...
;
enum E_AnyInt:
  INT = "int"
;

可以按照 xtext 文档中的说明引用这些类型:

MyRule:
  anyvar = [TR_Any]
  intvar = [TR_Int]
;
于 2013-03-14T20:36:02.903 回答