public CodeGeneratorVisitor(ProgramAnalysis analysis, TextWriter outputStream) : base(analysis) { Out = outputStream; WhileLabelGenerator = new LabelGenerator("While"); ElseLabelGenerator = new LabelGenerator("Else"); BooleanExpressionLabelGenerator = new LabelGenerator("BooleanExpression"); }
public ProgramAnalysis Analyze(Stream sourceStream) { ProgramAnalysis Analysis = new ProgramAnalysis(); Parser parser = new Parser(new MiniJavaCompiler.Scanner(sourceStream)); parser.Analysis = Analysis; parser.ErrorFlag = !parser.Parse(); if (parser.ErrorFlag) { Analysis.LogSyntaxError("Syntax error(s)", 0); } //else { CheckStaticSemantics(Analysis); } return Analysis; }
public ProgramAnalysis Analyze(Stream sourceStream) { ProgramAnalysis Analysis = new ProgramAnalysis(); Parser parser = new Parser(new MiniJavaCompiler.Scanner(sourceStream)); parser.Analysis = Analysis; parser.ErrorFlag = !parser.Parse(); if (parser.ErrorFlag) { Analysis.LogSyntaxError("Syntax error(s)", 0); } //else { CheckStaticSemantics(Analysis); } return(Analysis); }
private static void CheckStaticSemantics(ProgramAnalysis analysis) { try { ClassTypesExtractorVisitor CTEVisitor = new ClassTypesExtractorVisitor(analysis); ClassBaseTypesExtractorVisitor CBTEVisitor = new ClassBaseTypesExtractorVisitor(analysis); SymbolDefinitionsExtractorVisitor SDEVisitor = new SymbolDefinitionsExtractorVisitor(analysis); TypeCheckerVisitor TCVisitor = new TypeCheckerVisitor(analysis); CTEVisitor.Visit(analysis.AST); CBTEVisitor.Visit(analysis.AST); SDEVisitor.Visit(analysis.AST); TCVisitor.Visit(analysis.AST); } catch (Exception e) { analysis.LogSemanticError(e.Message, 0); } }
public void Synthesize(ProgramAnalysis sourceProgramAnalysis, TextWriter outputStream) { LivenessVisitor liveness = new LivenessVisitor(sourceProgramAnalysis); liveness.Visit(sourceProgramAnalysis.AST); Out = outputStream; GenText(".386"); GenText(".model flat,c"); GenText("public asm_main"); GenText("extern put:near,memalloc:near;"); CodeGeneratorVisitor CGVisitor = new CodeGeneratorVisitor(sourceProgramAnalysis, outputStream); MethodTableGeneratorVisitor MTGVisitor = new MethodTableGeneratorVisitor(sourceProgramAnalysis, outputStream); SymbolPreprocessorVisitor SPVisitor = new SymbolPreprocessorVisitor(sourceProgramAnalysis); MTGVisitor.Visit(sourceProgramAnalysis.AST); SPVisitor.Visit(sourceProgramAnalysis.AST); CGVisitor.Visit(sourceProgramAnalysis.AST); GenText("end"); }
private static bool Compile(string sourceFilePath, string outputFilePath) { System.IO.FileStream fstream = System.IO.File.OpenRead(sourceFilePath); MiniJavaAnalyzer Analyzer = new MiniJavaAnalyzer(); ProgramAnalysis Analysis = Analyzer.Analyze(fstream); fstream.Close(); if (Analysis.Errors.Count == 0) { System.IO.TextWriter outputStream = new System.IO.StreamWriter(outputFilePath); MiniJavaSynthesizer Synthesizer = new MiniJavaSynthesizer(); Synthesizer.Synthesize(Analysis, outputStream); outputStream.Close(); Console.WriteLine(Analysis.ToString()); return(true); } Console.WriteLine(Analysis.ToString()); Console.WriteLine(Analysis.Errors.Count.ToString() + " Error(s) found"); return(false); }
public BaseVisitor(ProgramAnalysis analysis) { this.Analysis = analysis; }
public MethodTableGeneratorVisitor(ProgramAnalysis analysis, TextWriter outputStream) : base(analysis) { Out = outputStream; }
public ClassBaseTypesExtractorVisitor(ProgramAnalysis analysis) : base(analysis) { }
public PrettyPrintVisitor(ProgramAnalysis analysis) : base(analysis) { }
public ClassTypesExtractorVisitor(ProgramAnalysis analysis) : base(analysis) { }
public LivenessVisitor(ProgramAnalysis analysis) : base(analysis) { }
public SymbolPreprocessorVisitor(ProgramAnalysis analysis) : base(analysis) { this.Analysis = analysis; }
public SymbolDefinitionsExtractorVisitor(ProgramAnalysis analysis) : base(analysis) { }
public TypeCheckerVisitor(ProgramAnalysis analysis) : base(analysis) { }