为了在Xtext中实例化Integer而不是终端规则而实现DefaultTerminalConverters会抛出ClassCastException

问题描述 投票:0回答:1

我想实现我自己的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 xtext
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.