public NablaAssembler(Stream code, string name = null) { Console.WriteLine("Cargando código en memoria..."); an = new AssemblyName(name ?? Guid.NewGuid().ToString()); #if NET48 ab = AssemblyBuilder.DefineDynamicAssembly(an, AssemblyBuilderAccess.RunAndSave); mb = ab.DefineDynamicModule(an.Name, $"{an.Name}.exe"); #endif nv = new NablaVisitor(ref mb); var lexer = new VoltaScanner(CharStreams.fromStream(code)); var tokens = new CommonTokenStream(lexer); var parser = new VoltaParser(tokens); var tree = parser.program(); var contextualAnalysis = new ContextualAnalysis(); contextualAnalysis.Visit(tree); Console.WriteLine("Ensamblando código..."); nv.Visit(tree); nv.rootType.CreateType(); #if NET48 ab.SetEntryPoint(nv.mainMethod); #endif Console.WriteLine("Código ensamblado correctamente."); }
public static Tuple <IParseTree, List <VoltaCompilerError> > Check(string text) { ICharStream charStream = CharStreams.fromstring(text); VoltaScanner scanner = new VoltaScanner(charStream); ITokenStream tokens = new CommonTokenStream(scanner); VoltaParser parser = new VoltaParser(tokens); VoltaParserErrorListener errorListener = new VoltaParserErrorListener(); parser.RemoveErrorListeners(); parser.AddErrorListener(errorListener); IParseTree tree = parser.program(); ContextualAnalysis contextualAnalysis = new ContextualAnalysis(); List <VoltaCompilerError> errors = new List <VoltaCompilerError>(); errors.AddRange(errorListener.Errors); { contextualAnalysis.Visit(tree); errors.AddRange(contextualAnalysis.Errors); } return(new Tuple <IParseTree, List <VoltaCompilerError> >(tree, errors)); }