Example #1
0
 public CodeGeneratorVisitor(ProgramAnalysis analysis, TextWriter outputStream) : base(analysis)
 {
     Out = outputStream;
     WhileLabelGenerator             = new LabelGenerator("While");
     ElseLabelGenerator              = new LabelGenerator("Else");
     BooleanExpressionLabelGenerator = new LabelGenerator("BooleanExpression");
 }
 public CodeGeneratorVisitor(ProgramAnalysis analysis, TextWriter outputStream)
     : base(analysis)
 {
     Out = outputStream;
     WhileLabelGenerator = new LabelGenerator("While");
     ElseLabelGenerator = new LabelGenerator("Else");
     BooleanExpressionLabelGenerator = new LabelGenerator("BooleanExpression");
 }
Example #3
0
        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;
        }
Example #4
0
        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);
        }
Example #5
0
 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);
     }
 }
Example #6
0
 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);
     }
 }
Example #7
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");
        }
Example #8
0
        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);
        }
Example #9
0
 public BaseVisitor(ProgramAnalysis analysis)
 {
     this.Analysis = analysis;
 }
 public MethodTableGeneratorVisitor(ProgramAnalysis analysis, TextWriter outputStream)
     : base(analysis)
 {
     Out = outputStream;
 }
 public ClassBaseTypesExtractorVisitor(ProgramAnalysis analysis)
     : base(analysis)
 {
 }
Example #12
0
 public PrettyPrintVisitor(ProgramAnalysis analysis)
     : base(analysis)
 {
 }
Example #13
0
 public BaseVisitor(ProgramAnalysis analysis)
 {
     this.Analysis = analysis;
 }
 public ClassTypesExtractorVisitor(ProgramAnalysis analysis)
     : base(analysis)
 {
 }
Example #15
0
 public LivenessVisitor(ProgramAnalysis analysis)
     : base(analysis)
 {
 }
 public SymbolPreprocessorVisitor(ProgramAnalysis analysis)
     : base(analysis)
 {
     this.Analysis = analysis;
 }
Example #17
0
 public SymbolDefinitionsExtractorVisitor(ProgramAnalysis analysis)
     : base(analysis)
 {
 }
Example #18
0
 public TypeCheckerVisitor(ProgramAnalysis analysis) : base(analysis)
 {
 }
 public MethodTableGeneratorVisitor(ProgramAnalysis analysis, TextWriter outputStream) : base(analysis)
 {
     Out = outputStream;
 }
 public SymbolPreprocessorVisitor(ProgramAnalysis analysis) : base(analysis)
 {
     this.Analysis = analysis;
 }
Example #21
0
 public LivenessVisitor(ProgramAnalysis analysis)
     : base(analysis)
 {
 }
 public SymbolDefinitionsExtractorVisitor(ProgramAnalysis analysis)
     : base(analysis)
 {
 }
Example #23
0
 public PrettyPrintVisitor(ProgramAnalysis analysis)
     : base(analysis)
 {
 }