Exemple #1
0
        public void OptimizationPipeline2()
        {
            var Text =
                @"
{
  x = 13;
  b = 14;
  if (x - x + 2 < a - a + 1 + 0)
  {
    x = x * (a - a);
    b = b;
  }
  if (true) 
  {
    a = 1;
  } 
  else 
  {
    a = 1;
  }
}
";
            Scanner scanner = new Scanner();

            scanner.SetSource(Text, 0);
            Parser parser = new Parser(scanner);

            parser.Parse();
            var parentFiller = new FillParentsVisitor();

            parser.root.Visit(parentFiller);

            AllVisitorsOptimization.Optimization(parser);

            var prettyPrinter = new PrettyPrinterVisitor();

            parser.root.Visit(prettyPrinter);

            var TACGenerator = new TACGenerationVisitor();

            parser.root.Visit(TACGenerator);
            var TAC = TACGenerator.TAC;

            var expected = new List <string>()
            {
                "x = 13",
                "b = 14",
                "a = 1"
            };
            var actual = TAC.Instructions.Select(instruction => instruction.ToString().Trim());

            CollectionAssert.AreEqual(expected, actual);
        }
Exemple #2
0
        public void ExprOptimization()
        {
            var Text =
                @"
{
  x = 13;
  b = 14;
  while (x < b)
  {
    x = (x * (a - a)) * 1;
    b = b;
  }
}
";
            Scanner scanner = new Scanner();

            scanner.SetSource(Text, 0);
            Parser parser = new Parser(scanner);

            parser.Parse();
            var parentFiller = new FillParentsVisitor();

            parser.root.Visit(parentFiller);

            AllVisitorsOptimization.Optimization(parser);

            var prettyPrinter = new PrettyPrinterVisitor();

            parser.root.Visit(prettyPrinter);

            var TACGenerator = new TACGenerationVisitor();

            parser.root.Visit(TACGenerator);
            var TAC = TACGenerator.TAC;

            var expected = new List <string>()
            {
                "x = 13",
                "b = 14",
                "#L0",
                "#t0 = x < b",
                "if #t0 goto #L1",
                "goto #L2",
                "#L1",
                "x = 0",
                "goto #L0",
                "#L2"
            };
            var actual = TAC.Instructions.Select(instruction => instruction.ToString().Trim());

            CollectionAssert.AreEqual(expected, actual);
        }
Exemple #3
0
        public void OptimizationPipeline5()
        {
            var Text =
                @"
{
  c = 3;
  if (2 > 1) 
  {
    a = a;
  }
  else 
  {
    b = b;
    if (3 > 2) 
    {
      a = a;
    }
  }
}
";
            Scanner scanner = new Scanner();

            scanner.SetSource(Text, 0);
            Parser parser = new Parser(scanner);

            parser.Parse();
            var parentFiller = new FillParentsVisitor();

            parser.root.Visit(parentFiller);

            AllVisitorsOptimization.Optimization(parser);

            var prettyPrinter = new PrettyPrinterVisitor();

            parser.root.Visit(prettyPrinter);

            var TACGenerator = new TACGenerationVisitor();

            parser.root.Visit(TACGenerator);
            var TAC = TACGenerator.TAC;

            var expected = new List <string>()
            {
                "c = 3"
            };
            var actual = TAC.Instructions.Select(instruction => instruction.ToString().Trim());

            CollectionAssert.AreEqual(expected, actual);
        }
Exemple #4
0
        public void WhileFalseOptimization()
        {
            var Text =
                @"
{
  x = 13;
  b = 14;
  while (7 - 7 == 3 - 1)
  {
    x = x * (a - a);
    b = b;
  }
}
";
            Scanner scanner = new Scanner();

            scanner.SetSource(Text, 0);
            Parser parser = new Parser(scanner);

            parser.Parse();
            var parentFiller = new FillParentsVisitor();

            parser.root.Visit(parentFiller);

            AllVisitorsOptimization.Optimization(parser);

            var prettyPrinter = new PrettyPrinterVisitor();

            parser.root.Visit(prettyPrinter);

            var TACGenerator = new TACGenerationVisitor();

            parser.root.Visit(TACGenerator);
            var TAC = TACGenerator.TAC;

            var expected = new List <string>()
            {
                "x = 13",
                "b = 14"
            };
            var actual = TAC.Instructions.Select(instruction => instruction.ToString().Trim());

            CollectionAssert.AreEqual(expected, actual);
        }
        public void Compile(string path)
        {
            try
            {
                string Text = File.ReadAllText(path);

                Scanner scanner = new Scanner();
                scanner.SetSource(Text, 0);

                Parser parser        = new Parser(scanner);
                var    parentVisitor = new FillParentsVisitor();

                var b = parser.Parse();
                if (!b)
                {
                    Console.WriteLine("Parsing error");
                }

                parser.root.Visit(parentVisitor);

                AllVisitorsOptimization.Optimization(parser, true);
                var blocks       = AllTacOptimization.Optimize(parser, true);
                var instructions = blocks.BlockMerging();

                Console.WriteLine("=====================Final Result=====================");
                foreach (var instruction in instructions)
                {
                    Console.WriteLine(instruction);
                }
            }
            catch (FileNotFoundException)
            {
                Console.WriteLine("File {0} doesn't exist", path);
            }
            catch (LexException e)
            {
                Console.WriteLine("Lex error. " + e.Message);
            }
            catch (SyntaxException e)
            {
                Console.WriteLine("Syntax error. " + e.Message);
            }
        }
Exemple #6
0
        public void SimpleOptimization()
        {
            var Text =
                @"
{
  b = a;
  c = a;
}
";
            Scanner scanner = new Scanner();

            scanner.SetSource(Text, 0);
            Parser parser = new Parser(scanner);

            parser.Parse();
            var parentFiller = new FillParentsVisitor();

            parser.root.Visit(parentFiller);

            AllVisitorsOptimization.Optimization(parser);

            var prettyPrinter = new PrettyPrinterVisitor();

            parser.root.Visit(prettyPrinter);

            var TAC = GenerateTAC(prettyPrinter.FormattedProgram);

            var expected = new List <string>()
            {
                "b = a",
                "c = a"
            };
            var actual = TAC.Instructions.Select(instruction => instruction.ToString().Trim());

            CollectionAssert.AreEqual(expected, actual);
        }