CASTBuilder.java
package edu.udel.cis.vsl.abc.front.c.astgen;
import edu.udel.cis.vsl.abc.ast.IF.AST;
import edu.udel.cis.vsl.abc.ast.IF.ASTFactory;
import edu.udel.cis.vsl.abc.ast.node.IF.SequenceNode;
import edu.udel.cis.vsl.abc.ast.node.IF.statement.BlockItemNode;
import edu.udel.cis.vsl.abc.config.IF.Configuration;
import edu.udel.cis.vsl.abc.front.IF.ASTBuilder;
import edu.udel.cis.vsl.abc.front.IF.ParseTree;
import edu.udel.cis.vsl.abc.front.c.ptree.CParseTree;
import edu.udel.cis.vsl.abc.front.common.astgen.ASTBuilderWorker;
import edu.udel.cis.vsl.abc.front.common.astgen.PragmaFactory;
import edu.udel.cis.vsl.abc.token.IF.SyntaxException;
public class CASTBuilder implements ASTBuilder {
private ASTFactory astFactory;
private PragmaFactory pragmaFactory;
private Configuration config;
public CASTBuilder(Configuration config, ASTFactory astFactory) {
this.astFactory = astFactory;
this.config = config;
pragmaFactory = new PragmaFactory(this);
}
@Override
public AST getTranslationUnit(ParseTree tree) throws SyntaxException {
ASTBuilderWorker worker = getWorker(tree);
SequenceNode<BlockItemNode> rootNode = worker.translateRoot();
AST ast = astFactory.newAST(rootNode,
((CParseTree) tree).getSourceFiles(), false);
return ast;
}
public CASTBuilderWorker getWorker(ParseTree tree) {
return new CASTBuilderWorker(config, (CParseTree) tree, astFactory,
pragmaFactory);
}
@Override
public ASTFactory getASTFactory() {
return astFactory;
}
@Override
public PragmaFactory getPragmaFactory() {
return pragmaFactory;
}
}