public void ThreeeAddressCodeTest() { string text = @" a = 2; while a > 1 a = a - 1;"; SyntaxTree.SyntaxNodes.SyntaxNode root = ParserWrap.Parse(text); var threeAddressCode = ThreeAddressCodeGenerator.CreateAndVisit(root).Program; var expectedCommands = new List <ThreeAddressCommand> { new Assignment("a", new Int32Const(2)), new Assignment("t0", new BinaryOperation("a", Operation.Greater, 1)), new ConditionalGoto("$GL_2", new BinaryOperation("t0", Operation.Equal, 0)) { Label = "$GL_1" }, new Assignment("t1", new BinaryOperation("a", Operation.Subtract, 1)), new Assignment("a", new Identifier("t1")), new Goto("$GL_1"), new NoOperation("$GL_2") }; CollectionAssert.AreEqual(threeAddressCode.Commands, expectedCommands); }
public void CFG2TACodeTransformationTest() { foreach (string sourseText in sources) { SyntaxTree.SyntaxNodes.SyntaxNode root = ParserWrap.Parse(sourseText); var sourceThreeAddressCode = ThreeAddressCodeGenerator.CreateAndVisit(root).Program; BasicBlocksList bbl = BasicBlocksGenerator.CreateBasicBlocks(sourceThreeAddressCode); Graph cfg = new Graph(bbl); List <ThreeAddressCommand> resultThreeAddressCode = cfg.transformToThreeAddressCode(); CollectionAssert.AreEqual(sourceThreeAddressCode.Commands, resultThreeAddressCode); } }