0

我正在使用 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 无法解析为一种类型”

4

1 回答 1

1

ITreeAppendable具有附加Class,JvmType或的实例的方法LightweightTypeReference。一个平原

it.append(FileDataset).append(' ').append(expr.name)

应该做的伎俩。

于 2014-10-22T13:00:16.167 回答