如何初始化Type int()?

时间:2014-02-28 09:17:30

标签: rascal

当尝试将Type初始化为\ int()时,如http://tutor.rascal-mpl.org/Rascal/Libraries/analysis/m3/Core/modifiers/modifiers.html#/Rascal/Libraries/lang/java/m3/AST/Declaration/Declaration.html中所示,rascal会抛出一个错误,说“预期类型,但得到了TypeSymbol”。

这是我使用的代码:

Type inttype = \int();

将Type变量初始化为\ int()的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

\int()TypeSymbol,我认为您正在寻找

Type inttype = int();

答案 1 :(得分:2)

要解决问题,您可以写:

Type myIntType = Type::\int();

更多解释如下。 \int()构造函数在不同的地方至少定义了两次:

  • Declarations中使用的Java类型的抽象语法树定义中。它是源代码中单词int的表示。
  • 在java :: lang :: m3 :: Core中的TypeSymbol定义中。 \int()代表符号类型。

它们具有相同的名称,因为它们指向相同的概念,但使用不同的表示形式。第一个用于直接表示源代码,第二个用于抽象符号解释。

要区分这两种表示,您应该导入定义AST节点的模块,或者导入定义TypeSymbols的模块。如果您碰巧同时导入了两者,则应明确选择一种表示形式:

Type myIntType = Type::\int(); TypeSymbol mySymbol = TypeSymbol::\int();

因此,为了最终解释错误消息,系统选择TypeSymbol中的第二种\ int()`来构建一个值,并尝试将其分配给第一种变量。