【发布时间】:2019-02-24 22:55:51
【问题描述】:
我想实现我自己的 DefaultTerminalConverters 类来满足 Integer 而不是终端规则 VALUE_TERMINAL
我的语法中的VALUE_TERMINAL是:
terminal VALUE_TERMINAL:
( '0' .. '9' )+ ;
我自己的 DefaultTerminalConverters 的代码是:
import com.google.inject.Inject;
import org.eclipse.xtext.common.services.DefaultTerminalConverters;
import org.eclipse.xtext.conversion.IValueConverter;
import org.eclipse.xtext.conversion.ValueConverter;
import org.eclipse.xtext.conversion.impl.AbstractLexerBasedConverter;
import org.eclipse.xtext.nodemodel.INode;
public class MyLangValueConverter extends DefaultTerminalConverters {
@Inject MyINTValueConverter myINTValueConverter;
@ValueConverter(rule="VALUE_TERMINAL")
public IValueConverter<Integer> VALUE_TERMINAL() {
return myINTValueConverter;
}
private static class MyINTValueConverter extends AbstractLexerBasedConverter<Integer> {
@Override
public Integer toValue(String string, INode node) {
return new Integer(string);
}
@Override
public String toString(Integer value){
return String.valueOf(value);
}
}
}
当我在自己的 DSL 中编写某些内容时,我总是在使用 VALUE_TERMINAL 时收到错误 java.lang.Integer cannot be cast to java.lang.String。可能是什么问题呢 ?
【问题讨论】:
-
异常发生在哪一行?
-
这个类中不会出现。当我用我的 DSL 运行新的 Eclipse 实例并在这个 DSL 中写一些东西时,我可以看到
toValue()方法在 VALUE_TERMINAL 规则被实例化时正确执行。但是在第二个 Eclipse 实例的控制台中,我看到了那个异常,但我不知道它来自哪里。