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)); }