Ejemplo n.º 1
0
        public void SimpleExample2()
        {
            var Text = (
                @"
{
  x = 7 - 8 * 0 + 3;
}
");
            Scanner scanner = new Scanner();

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

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

            parser.root.Visit(parentFiller);

            var optimizer = new ConstantFoldingVisitor();

            parser.root.Visit(optimizer);

            var TACGenerator = new TACGenerationVisitor();

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

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

            CollectionAssert.AreEqual(expected, actual);
        }
        internal static AstData FoldConstants(AstData astData, SideeffectHelper helper)
        {
            var constantFoldingVisitor = new ConstantFoldingVisitor();
            var operandSortingVisitor  = new OperandSortingVisitor();

            var newTree = astData.Tree.RootNode;

            do
            {
                constantFoldingVisitor.OptimizationsWereMade = false;
                newTree = operandSortingVisitor.Visit(newTree);
                newTree = constantFoldingVisitor.Visit(newTree);
            } while (constantFoldingVisitor.OptimizationsWereMade);

            return(new AstData(astData.TokenStream, astData.Filename, newTree.OwningTree));
        }