package polyglot.ext.pao; import java.io.Reader; import java.util.List; import polyglot.ast.NodeFactory; import polyglot.ext.pao.ast.PaoNodeFactory_c; import polyglot.ext.pao.parse.Grm; import polyglot.ext.pao.parse.Lexer_c; import polyglot.ext.pao.types.PaoTypeSystem_c; import polyglot.ext.pao.visit.PaoBoxer; import polyglot.frontend.*; import polyglot.lex.Lexer; import polyglot.types.TypeSystem; import polyglot.util.ErrorQueue; /** * Extension information for the PAO extension. This class specifies the * appropriate parser, <code>NodeFactory</code> and <code>TypeSystem</code> * to use, as well as inserting a new pass: <code>PaoBoxer</code>. * * @see polyglot.ext.pao.visit.PaoBoxer * @see polyglot.ext.pao.ast.PaoNodeFactory_c * @see polyglot.ext.pao.types.PaoTypeSystem * @see polyglot.ext.pao.types.PaoTypeSystem_c */ public class ExtensionInfo extends polyglot.ext.jl.ExtensionInfo { public String defaultFileExtension() { return "pao"; } public String compilerName() { return "paoc"; } public Parser parser(Reader reader, FileSource source, ErrorQueue eq) { Lexer lexer = new Lexer_c(reader, source.name(), eq); Grm grm = new Grm(lexer, ts, nf, eq); return new CupParser(grm, source, eq); } protected NodeFactory createNodeFactory() { return new PaoNodeFactory_c(); } protected TypeSystem createTypeSystem() { return new PaoTypeSystem_c(); } public static final Pass.ID CAST_REWRITE = new Pass.ID("cast-rewrite"); public List passes(Job job) { List passes = super.passes(job); beforePass(passes, Pass.PRE_OUTPUT_ALL, new VisitorPass(CAST_REWRITE, job, new PaoBoxer(job, ts, nf))); return passes; } static { // Make sure the class Topics is loaded. new Topics(); } }