我想实现我自己的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
。可能是什么问题呢 ?