package eu.bibl.cfide.engine.compiler; import java.util.List; import eu.bibl.cfide.context.CFIDEContext; import eu.bibl.cfide.engine.compiler.builder.IBuilder; import eu.bibl.cfide.engine.compiler.parser.BasicTokenParser; import eu.bibl.cfide.engine.compiler.parser.ParserToken; import eu.bibl.cfide.engine.compiler.parser.cfideimpl.BytecodeSourceParser; public abstract class BasicSourceCompiler<T> implements ICompiler<T, String> { protected CFIDEContext context; protected BasicTokenParser tokenParser; protected IBuilder<T, List<ParserToken>> tokenBuilder; public BasicSourceCompiler(CFIDEContext context) { this.context = context; this.tokenBuilder = getBuilderImpl(); tokenParser = getTokenParserImpl(); } protected BasicTokenParser getTokenParserImpl() { return new BytecodeSourceParser(context); } protected abstract IBuilder<T, List<ParserToken>> getBuilderImpl(); @Override public T compile(String source) throws CompilerException { List<ParserToken> tokens = tokenParser.parse(source); T builtObject = tokenBuilder.build(tokens); if (builtObject == null) throw new CompilerException("Object was not compiled successfully."); return builtObject; } }