我正在使用XBase编写DSL,并且我添加了一个新的解析器规则,该规则在语法中返回XExpression
:
DatastepExpression returns xbase::XExpression: {DatastepExpression} 'data' name=ID '{' '}';
并将适当的函数添加到XbaseTypeComputer
子类:
protected def _computeTypes(DatastepExpression expression, ITypeComputationState state) {
var type = getTypeForName(typeof(FileDataset), state)
state.acceptActualType(type)
}
现在我尝试将方法添加到XbaseCompiler子类中:
override protected doInternalToJavaStatement(XExpression expr, ITreeAppendable it, boolean isReferenced) {
switch expr {
DatastepExpression: {
newLine
append('''FileDataset «expr.name»;''')
}
default:
super.doInternalToJavaStatement(expr, it, isReferenced)
}
}
其中FileDataset
是我的语言API中的自定义类。
如何让这个类出现在生成文件顶部的导入中?
目前,当我用我的语言创建一个新文件时(在运行时Eclipse中),生成的Java文件包含FileDataset
变量声明,但它下面有一条红色波浪线,错误" FileDataset无法解析为#34;
答案 0 :(得分:1)
ITreeAppendable
有附加Class
,JvmType
或LightweightTypeReference
实例的方法。一个普通的
it.append(FileDataset).append(' ').append(expr.name)
应该这样做。