import java.util.Hashtable; import java.util.List; import java.util.Vector; import org.overture.interpreter.ast.node.ConvertFactoryInterpreter; import org.overture.interpreter.ast.node.CopyAdaptorInterpreter; import org.overture.interpreter.ast.node.NodeInterpreter; import org.overture.interpreter.util.ClonableFile; import org.overture.interpreter.vdmj.lex.LexBooleanToken; import org.overture.interpreter.vdmj.lex.LexCharacterToken; import org.overture.interpreter.vdmj.lex.LexIdentifierToken; import org.overture.interpreter.vdmj.lex.LexIntegerToken; import org.overture.interpreter.vdmj.lex.LexLocation; import org.overture.interpreter.vdmj.lex.LexNameToken; import org.overture.interpreter.vdmj.lex.LexQuoteToken; import org.overture.interpreter.vdmj.lex.LexRealToken; import org.overture.interpreter.vdmj.lex.LexStringToken; import org.overture.interpreter.vdmj.lex.LexToken; import org.overture.vdmj.lex.LexException; import org.overture.vdmj.syntax.ParserException; import org.overture.vdmj.typechecker.ClassDefinitionSettings; import org.overture.vdmj.typechecker.NameScope; public class ConvertAst extends BasicTypeCheckTestCase { public ConvertAst(String string) { super("test"); } public void test() throws ParserException, LexException { List<org.overture.ast.node.Node> exp = parse(ParserType.Module, "module A \ndefinitions \nfunctions\na : int -> int\na(b) == b;\nend A"); @SuppressWarnings("rawtypes") CopyAdaptorInterpreter visitor = new CopyAdaptorInterpreter(new Factory(),new Hashtable()); NodeInterpreter node = exp.get(0).apply(visitor); System.out.println(node); } public static class Factory extends ConvertFactoryInterpreter { @Override public LexToken convert(org.overture.vdmj.lex.LexToken node) { return new LexToken(convert(node.location), node.type); } @Override public LexNameToken convert(org.overture.vdmj.lex.LexNameToken node) { return new LexNameToken(node.module, node.name, convert(node.location), node.old, node.explicit); } @Override public LexIdentifierToken convert( org.overture.vdmj.lex.LexIdentifierToken node) { return new LexIdentifierToken(node.name, node.old, convert(node.location)); } @Override public LexBooleanToken convert( org.overture.vdmj.lex.LexBooleanToken node) { return new LexBooleanToken(node.value, convert(node.location)); } @Override public LexCharacterToken convert( org.overture.vdmj.lex.LexCharacterToken node) { return new LexCharacterToken(node.unicode, convert(node.location)); } @Override public LexIntegerToken convert( org.overture.vdmj.lex.LexIntegerToken node) { return new LexIntegerToken(node.value, convert(node.location)); } @Override public LexQuoteToken convert( org.overture.vdmj.lex.LexQuoteToken node) { return new LexQuoteToken(node.value, convert(node.location)); } @Override public LexRealToken convert(org.overture.vdmj.lex.LexRealToken node) { return new LexRealToken(node.value, convert(node.location)); } @Override public LexStringToken convert( org.overture.vdmj.lex.LexStringToken node) { return new LexStringToken(node.value, convert(node.location)); } @Override public LexLocation convert(org.overture.vdmj.lex.LexLocation node) { return new LexLocation(node.file, node.module, node.startLine, node.startPos, node.endLine, node.endPos); } @Override public NameScope convert(NameScope node) { return node; } @Override public ClassDefinitionSettings convert(ClassDefinitionSettings node) { return node; } @Override public List<? extends ClonableFile> convert( List<? extends org.overture.util.ClonableFile> node) { List<ClonableFile> files = new Vector<ClonableFile>(); for (org.overture.util.ClonableFile clonableFile : node) { files.add(new ClonableFile(clonableFile)); } return files; } } }