From 242ca887f98912afd5cd66d8283b0d3697ac7917 Mon Sep 17 00:00:00 2001 From: Joshua Potter Date: Wed, 5 Mar 2014 09:33:26 -0500 Subject: [PATCH] Left Precedence Corrected left precedence rules when a right precedence rule is not available (or parenthesis (woah)). --- docs/PA3.pdf | Bin 0 -> 138844 bytes .../miniJava/SyntacticAnalyzer/Parser.java | 18 ++-- miniJava/src/tester/Checkpoint2.java | 98 +++++++++++++++++ miniJava/test.java | 15 ++- miniJava/tests/pa2_tests/fail117.java | 2 + miniJava/tests/pa2_tests/fail119.java | 2 + miniJava/tests/pa2_tests/fail125.java | 7 ++ miniJava/tests/pa2_tests/fail130.java | 5 + miniJava/tests/pa2_tests/fail131.java | 5 + miniJava/tests/pa2_tests/fail145.java | 6 ++ miniJava/tests/pa2_tests/fail146.java | 8 ++ miniJava/tests/pa2_tests/fail147.java | 8 ++ miniJava/tests/pa2_tests/fail148.java | 8 ++ miniJava/tests/pa2_tests/fail150.java | 6 ++ miniJava/tests/pa2_tests/fail151.java | 6 ++ miniJava/tests/pa2_tests/fail154.java | 6 ++ miniJava/tests/pa2_tests/fail155.java | 6 ++ miniJava/tests/pa2_tests/fail158.java | 6 ++ miniJava/tests/pa2_tests/fail161.java | 8 ++ miniJava/tests/pa2_tests/fail162.java | 8 ++ miniJava/tests/pa2_tests/fail163.java | 8 ++ miniJava/tests/pa2_tests/fail164.java | 8 ++ miniJava/tests/pa2_tests/fail165.java | 8 ++ miniJava/tests/pa2_tests/fail167.java | 8 ++ miniJava/tests/pa2_tests/fail168.java | 8 ++ miniJava/tests/pa2_tests/fail201.java | 4 + miniJava/tests/pa2_tests/fail206.java | 7 ++ miniJava/tests/pa2_tests/fail207.java | 4 + miniJava/tests/pa2_tests/fail208.java | 4 + miniJava/tests/pa2_tests/fail210.java | 4 + miniJava/tests/pa2_tests/fail212.java | 7 ++ miniJava/tests/pa2_tests/fail213.java | 7 ++ miniJava/tests/pa2_tests/fail214.java | 6 ++ miniJava/tests/pa2_tests/fail216.java | 6 ++ miniJava/tests/pa2_tests/fail217.java | 6 ++ miniJava/tests/pa2_tests/fail218.java | 6 ++ miniJava/tests/pa2_tests/fail219.java | 6 ++ miniJava/tests/pa2_tests/fail220.java | 6 ++ miniJava/tests/pa2_tests/fail222.java | 6 ++ miniJava/tests/pa2_tests/fail224.java | 6 ++ miniJava/tests/pa2_tests/fail230.java | 4 + miniJava/tests/pa2_tests/fail231.java | 4 + miniJava/tests/pa2_tests/fail232.java | 4 + miniJava/tests/pa2_tests/fail233.java | 4 + miniJava/tests/pa2_tests/fail234.java | 4 + miniJava/tests/pa2_tests/pass101.java | 3 + miniJava/tests/pa2_tests/pass101.java.out | 8 ++ miniJava/tests/pa2_tests/pass110.java | 3 + miniJava/tests/pa2_tests/pass110.java.out | 8 ++ miniJava/tests/pa2_tests/pass113.java | 2 + miniJava/tests/pa2_tests/pass113.java.out | 8 ++ miniJava/tests/pa2_tests/pass120.java | 3 + miniJava/tests/pa2_tests/pass120.java.out | 8 ++ miniJava/tests/pa2_tests/pass130.java | 0 miniJava/tests/pa2_tests/pass130.java.out | 4 + miniJava/tests/pa2_tests/pass131.java | 12 +++ miniJava/tests/pa2_tests/pass131.java.out | 8 ++ miniJava/tests/pa2_tests/pass132.java | 3 + miniJava/tests/pa2_tests/pass132.java.out | 8 ++ miniJava/tests/pa2_tests/pass133.java | 3 + miniJava/tests/pa2_tests/pass133.java.out | 8 ++ miniJava/tests/pa2_tests/pass136.java | 2 + miniJava/tests/pa2_tests/pass136.java.out | 8 ++ miniJava/tests/pa2_tests/pass137.java | 2 + miniJava/tests/pa2_tests/pass137.java.out | 8 ++ miniJava/tests/pa2_tests/pass140.java | 5 + miniJava/tests/pa2_tests/pass140.java.out | 12 +++ miniJava/tests/pa2_tests/pass141.java | 5 + miniJava/tests/pa2_tests/pass141.java.out | 12 +++ miniJava/tests/pa2_tests/pass142.java | 5 + miniJava/tests/pa2_tests/pass142.java.out | 12 +++ miniJava/tests/pa2_tests/pass143.java | 5 + miniJava/tests/pa2_tests/pass143.java.out | 12 +++ miniJava/tests/pa2_tests/pass146.java | 5 + miniJava/tests/pa2_tests/pass146.java.out | 11 ++ miniJava/tests/pa2_tests/pass147.java | 5 + miniJava/tests/pa2_tests/pass147.java.out | 18 ++++ miniJava/tests/pa2_tests/pass148.java | 5 + miniJava/tests/pa2_tests/pass148.java.out | 21 ++++ miniJava/tests/pa2_tests/pass150.java | 9 ++ miniJava/tests/pa2_tests/pass150.java.out | 25 +++++ miniJava/tests/pa2_tests/pass152.java | 8 ++ miniJava/tests/pa2_tests/pass152.java.out | 26 +++++ miniJava/tests/pa2_tests/pass153.java | 8 ++ miniJava/tests/pa2_tests/pass153.java.out | 22 ++++ miniJava/tests/pa2_tests/pass154.java | 23 ++++ miniJava/tests/pa2_tests/pass154.java.out | 68 ++++++++++++ miniJava/tests/pa2_tests/pass155.java | 21 ++++ miniJava/tests/pa2_tests/pass155.java.out | 99 ++++++++++++++++++ miniJava/tests/pa2_tests/pass156.java | 6 ++ miniJava/tests/pa2_tests/pass156.java.out | 20 ++++ miniJava/tests/pa2_tests/pass158.java | 12 +++ miniJava/tests/pa2_tests/pass158.java.out | 52 +++++++++ miniJava/tests/pa2_tests/pass159.java | 11 ++ miniJava/tests/pa2_tests/pass159.java.out | 29 +++++ miniJava/tests/pa2_tests/pass160.java | 9 ++ miniJava/tests/pa2_tests/pass160.java.out | 27 +++++ miniJava/tests/pa2_tests/pass161.java | 8 ++ miniJava/tests/pa2_tests/pass161.java.out | 19 ++++ miniJava/tests/pa2_tests/pass162.java | 8 ++ miniJava/tests/pa2_tests/pass162.java.out | 29 +++++ miniJava/tests/pa2_tests/pass163.java | 8 ++ miniJava/tests/pa2_tests/pass163.java.out | 25 +++++ miniJava/tests/pa2_tests/pass164.java | 8 ++ miniJava/tests/pa2_tests/pass164.java.out | 34 ++++++ miniJava/tests/pa2_tests/pass165.java | 9 ++ miniJava/tests/pa2_tests/pass165.java.out | 34 ++++++ miniJava/tests/pa2_tests/pass166.java | 9 ++ miniJava/tests/pa2_tests/pass166.java.out | 35 +++++++ miniJava/tests/pa2_tests/pass169.java | 8 ++ miniJava/tests/pa2_tests/pass169.java.out | 24 +++++ miniJava/tests/pa2_tests/pass171.java | 8 ++ miniJava/tests/pa2_tests/pass171.java.out | 31 ++++++ miniJava/tests/pa2_tests/pass175.java | 7 ++ miniJava/tests/pa2_tests/pass175.java.out | 59 +++++++++++ miniJava/tests/pa2_tests/pass176.java | 7 ++ miniJava/tests/pa2_tests/pass176.java.out | 28 +++++ miniJava/tests/pa2_tests/pass178.java | 7 ++ miniJava/tests/pa2_tests/pass178.java.out | 27 +++++ miniJava/tests/pa2_tests/pass179.java | 7 ++ miniJava/tests/pa2_tests/pass179.java.out | 31 ++++++ miniJava/tests/pa2_tests/pass201.java | 6 ++ miniJava/tests/pa2_tests/pass201.java.out | 19 ++++ miniJava/tests/pa2_tests/pass202.java | 4 + miniJava/tests/pa2_tests/pass202.java.out | 13 +++ miniJava/tests/pa2_tests/pass203.java | 6 ++ miniJava/tests/pa2_tests/pass203.java.out | 15 +++ miniJava/tests/pa2_tests/pass204.java | 6 ++ miniJava/tests/pa2_tests/pass204.java.out | 20 ++++ miniJava/tests/pa2_tests/pass205.java | 4 + miniJava/tests/pa2_tests/pass205.java.out | 18 ++++ miniJava/tests/pa2_tests/pass206.java | 4 + miniJava/tests/pa2_tests/pass206.java.out | 17 +++ miniJava/tests/pa2_tests/pass207.java | 6 ++ miniJava/tests/pa2_tests/pass207.java.out | 21 ++++ miniJava/tests/pa2_tests/pass208.java | 6 ++ miniJava/tests/pa2_tests/pass208.java.out | 21 ++++ miniJava/tests/pa2_tests/pass209.java | 6 ++ miniJava/tests/pa2_tests/pass209.java.out | 23 ++++ miniJava/tests/pa2_tests/pass210.java | 6 ++ miniJava/tests/pa2_tests/pass210.java.out | 16 +++ miniJava/tests/pa2_tests/pass211.java | 6 ++ miniJava/tests/pa2_tests/pass211.java.out | 20 ++++ miniJava/tests/pa2_tests/pass212.java | 6 ++ miniJava/tests/pa2_tests/pass212.java.out | 26 +++++ miniJava/tests/pa2_tests/pass213.java | 6 ++ miniJava/tests/pa2_tests/pass213.java.out | 20 ++++ miniJava/tests/pa2_tests/pass214.java | 6 ++ miniJava/tests/pa2_tests/pass214.java.out | 23 ++++ miniJava/tests/pa2_tests/pass215.java | 6 ++ miniJava/tests/pa2_tests/pass215.java.out | 25 +++++ miniJava/tests/pa2_tests/pass216.java | 6 ++ miniJava/tests/pa2_tests/pass216.java.out | 29 +++++ miniJava/tests/pa2_tests/pass217.java | 6 ++ miniJava/tests/pa2_tests/pass217.java.out | 34 ++++++ miniJava/tests/pa2_tests/pass222.java | 9 ++ miniJava/tests/pa2_tests/pass222.java.out | 33 ++++++ miniJava/tests/pa2_tests/pass223.java | 21 ++++ miniJava/tests/pa2_tests/pass223.java.out | 63 +++++++++++ miniJava/tests/pa2_tests/pass224.java | 6 ++ miniJava/tests/pa2_tests/pass224.java.out | 38 +++++++ miniJava/tests/pa2_tests/pass250.java | 6 ++ miniJava/tests/pa2_tests/pass250.java.out | 26 +++++ miniJava/tests/pa2_tests/pass251.java | 6 ++ miniJava/tests/pa2_tests/pass251.java.out | 26 +++++ miniJava/tests/pa2_tests/pass252.java | 6 ++ miniJava/tests/pa2_tests/pass252.java.out | 26 +++++ miniJava/tests/pa2_tests/pass253.java | 6 ++ miniJava/tests/pa2_tests/pass253.java.out | 26 +++++ miniJava/tests/pa2_tests/pass254.java | 6 ++ miniJava/tests/pa2_tests/pass254.java.out | 26 +++++ miniJava/tests/pa2_tests/pass255.java | 6 ++ miniJava/tests/pa2_tests/pass255.java.out | 27 +++++ miniJava/tests/pa2_tests/pass256.java | 6 ++ miniJava/tests/pa2_tests/pass256.java.out | 25 +++++ miniJava/tests/pa2_tests/pass257.java | 6 ++ miniJava/tests/pa2_tests/pass257.java.out | 27 +++++ miniJava/tests/pa2_tests/pass258.java | 6 ++ miniJava/tests/pa2_tests/pass258.java.out | 26 +++++ miniJava/tests/pa2_tests/pass259.java | 6 ++ miniJava/tests/pa2_tests/pass259.java.out | 28 +++++ miniJava/tests/pa2_tests/pass260.java | 6 ++ miniJava/tests/pa2_tests/pass260.java.out | 30 ++++++ miniJava/tests/pa2_tests/pass261.java | 6 ++ miniJava/tests/pa2_tests/pass261.java.out | 31 ++++++ miniJava/tests/pa2_tests/pass262.java | 6 ++ miniJava/tests/pa2_tests/pass262.java.out | 31 ++++++ miniJava/tests/pa2_tests/pass263.java | 6 ++ miniJava/tests/pa2_tests/pass263.java.out | 35 +++++++ miniJava/tests/pa2_tests/pass264.java | 6 ++ miniJava/tests/pa2_tests/pass264.java.out | 35 +++++++ miniJava/tests/pa2_tests/pass265.java | 6 ++ miniJava/tests/pa2_tests/pass265.java.out | 33 ++++++ miniJava/tests/pa2_tests/pass290.java | 8 ++ miniJava/tests/pa2_tests/pass290.java.out | 90 ++++++++++++++++ miniJava/tests/pa2_tests/pass291.java | 34 ++++++ miniJava/tests/pa2_tests/pass291.java.out | 86 +++++++++++++++ 197 files changed, 2943 insertions(+), 15 deletions(-) create mode 100644 docs/PA3.pdf create mode 100644 miniJava/src/tester/Checkpoint2.java create mode 100644 miniJava/tests/pa2_tests/fail117.java create mode 100644 miniJava/tests/pa2_tests/fail119.java create mode 100644 miniJava/tests/pa2_tests/fail125.java create mode 100644 miniJava/tests/pa2_tests/fail130.java create mode 100644 miniJava/tests/pa2_tests/fail131.java create mode 100644 miniJava/tests/pa2_tests/fail145.java create mode 100644 miniJava/tests/pa2_tests/fail146.java create mode 100644 miniJava/tests/pa2_tests/fail147.java create mode 100644 miniJava/tests/pa2_tests/fail148.java create mode 100644 miniJava/tests/pa2_tests/fail150.java create mode 100644 miniJava/tests/pa2_tests/fail151.java create mode 100644 miniJava/tests/pa2_tests/fail154.java create mode 100644 miniJava/tests/pa2_tests/fail155.java create mode 100644 miniJava/tests/pa2_tests/fail158.java create mode 100644 miniJava/tests/pa2_tests/fail161.java create mode 100644 miniJava/tests/pa2_tests/fail162.java create mode 100644 miniJava/tests/pa2_tests/fail163.java create mode 100644 miniJava/tests/pa2_tests/fail164.java create mode 100644 miniJava/tests/pa2_tests/fail165.java create mode 100644 miniJava/tests/pa2_tests/fail167.java create mode 100644 miniJava/tests/pa2_tests/fail168.java create mode 100644 miniJava/tests/pa2_tests/fail201.java create mode 100644 miniJava/tests/pa2_tests/fail206.java create mode 100644 miniJava/tests/pa2_tests/fail207.java create mode 100644 miniJava/tests/pa2_tests/fail208.java create mode 100644 miniJava/tests/pa2_tests/fail210.java create mode 100644 miniJava/tests/pa2_tests/fail212.java create mode 100644 miniJava/tests/pa2_tests/fail213.java create mode 100644 miniJava/tests/pa2_tests/fail214.java create mode 100644 miniJava/tests/pa2_tests/fail216.java create mode 100644 miniJava/tests/pa2_tests/fail217.java create mode 100644 miniJava/tests/pa2_tests/fail218.java create mode 100644 miniJava/tests/pa2_tests/fail219.java create mode 100644 miniJava/tests/pa2_tests/fail220.java create mode 100644 miniJava/tests/pa2_tests/fail222.java create mode 100644 miniJava/tests/pa2_tests/fail224.java create mode 100644 miniJava/tests/pa2_tests/fail230.java create mode 100644 miniJava/tests/pa2_tests/fail231.java create mode 100644 miniJava/tests/pa2_tests/fail232.java create mode 100644 miniJava/tests/pa2_tests/fail233.java create mode 100644 miniJava/tests/pa2_tests/fail234.java create mode 100644 miniJava/tests/pa2_tests/pass101.java create mode 100644 miniJava/tests/pa2_tests/pass101.java.out create mode 100644 miniJava/tests/pa2_tests/pass110.java create mode 100644 miniJava/tests/pa2_tests/pass110.java.out create mode 100644 miniJava/tests/pa2_tests/pass113.java create mode 100644 miniJava/tests/pa2_tests/pass113.java.out create mode 100644 miniJava/tests/pa2_tests/pass120.java create mode 100644 miniJava/tests/pa2_tests/pass120.java.out create mode 100644 miniJava/tests/pa2_tests/pass130.java create mode 100644 miniJava/tests/pa2_tests/pass130.java.out create mode 100644 miniJava/tests/pa2_tests/pass131.java create mode 100644 miniJava/tests/pa2_tests/pass131.java.out create mode 100644 miniJava/tests/pa2_tests/pass132.java create mode 100644 miniJava/tests/pa2_tests/pass132.java.out create mode 100644 miniJava/tests/pa2_tests/pass133.java create mode 100644 miniJava/tests/pa2_tests/pass133.java.out create mode 100644 miniJava/tests/pa2_tests/pass136.java create mode 100644 miniJava/tests/pa2_tests/pass136.java.out create mode 100644 miniJava/tests/pa2_tests/pass137.java create mode 100644 miniJava/tests/pa2_tests/pass137.java.out create mode 100644 miniJava/tests/pa2_tests/pass140.java create mode 100644 miniJava/tests/pa2_tests/pass140.java.out create mode 100644 miniJava/tests/pa2_tests/pass141.java create mode 100644 miniJava/tests/pa2_tests/pass141.java.out create mode 100644 miniJava/tests/pa2_tests/pass142.java create mode 100644 miniJava/tests/pa2_tests/pass142.java.out create mode 100644 miniJava/tests/pa2_tests/pass143.java create mode 100644 miniJava/tests/pa2_tests/pass143.java.out create mode 100644 miniJava/tests/pa2_tests/pass146.java create mode 100644 miniJava/tests/pa2_tests/pass146.java.out create mode 100644 miniJava/tests/pa2_tests/pass147.java create mode 100644 miniJava/tests/pa2_tests/pass147.java.out create mode 100644 miniJava/tests/pa2_tests/pass148.java create mode 100644 miniJava/tests/pa2_tests/pass148.java.out create mode 100644 miniJava/tests/pa2_tests/pass150.java create mode 100644 miniJava/tests/pa2_tests/pass150.java.out create mode 100644 miniJava/tests/pa2_tests/pass152.java create mode 100644 miniJava/tests/pa2_tests/pass152.java.out create mode 100644 miniJava/tests/pa2_tests/pass153.java create mode 100644 miniJava/tests/pa2_tests/pass153.java.out create mode 100644 miniJava/tests/pa2_tests/pass154.java create mode 100644 miniJava/tests/pa2_tests/pass154.java.out create mode 100644 miniJava/tests/pa2_tests/pass155.java create mode 100644 miniJava/tests/pa2_tests/pass155.java.out create mode 100644 miniJava/tests/pa2_tests/pass156.java create mode 100644 miniJava/tests/pa2_tests/pass156.java.out create mode 100644 miniJava/tests/pa2_tests/pass158.java create mode 100644 miniJava/tests/pa2_tests/pass158.java.out create mode 100644 miniJava/tests/pa2_tests/pass159.java create mode 100644 miniJava/tests/pa2_tests/pass159.java.out create mode 100644 miniJava/tests/pa2_tests/pass160.java create mode 100644 miniJava/tests/pa2_tests/pass160.java.out create mode 100644 miniJava/tests/pa2_tests/pass161.java create mode 100644 miniJava/tests/pa2_tests/pass161.java.out create mode 100644 miniJava/tests/pa2_tests/pass162.java create mode 100644 miniJava/tests/pa2_tests/pass162.java.out create mode 100644 miniJava/tests/pa2_tests/pass163.java create mode 100644 miniJava/tests/pa2_tests/pass163.java.out create mode 100644 miniJava/tests/pa2_tests/pass164.java create mode 100644 miniJava/tests/pa2_tests/pass164.java.out create mode 100644 miniJava/tests/pa2_tests/pass165.java create mode 100644 miniJava/tests/pa2_tests/pass165.java.out create mode 100644 miniJava/tests/pa2_tests/pass166.java create mode 100644 miniJava/tests/pa2_tests/pass166.java.out create mode 100644 miniJava/tests/pa2_tests/pass169.java create mode 100644 miniJava/tests/pa2_tests/pass169.java.out create mode 100644 miniJava/tests/pa2_tests/pass171.java create mode 100644 miniJava/tests/pa2_tests/pass171.java.out create mode 100644 miniJava/tests/pa2_tests/pass175.java create mode 100644 miniJava/tests/pa2_tests/pass175.java.out create mode 100644 miniJava/tests/pa2_tests/pass176.java create mode 100644 miniJava/tests/pa2_tests/pass176.java.out create mode 100644 miniJava/tests/pa2_tests/pass178.java create mode 100644 miniJava/tests/pa2_tests/pass178.java.out create mode 100644 miniJava/tests/pa2_tests/pass179.java create mode 100644 miniJava/tests/pa2_tests/pass179.java.out create mode 100644 miniJava/tests/pa2_tests/pass201.java create mode 100644 miniJava/tests/pa2_tests/pass201.java.out create mode 100644 miniJava/tests/pa2_tests/pass202.java create mode 100644 miniJava/tests/pa2_tests/pass202.java.out create mode 100644 miniJava/tests/pa2_tests/pass203.java create mode 100644 miniJava/tests/pa2_tests/pass203.java.out create mode 100644 miniJava/tests/pa2_tests/pass204.java create mode 100644 miniJava/tests/pa2_tests/pass204.java.out create mode 100644 miniJava/tests/pa2_tests/pass205.java create mode 100644 miniJava/tests/pa2_tests/pass205.java.out create mode 100644 miniJava/tests/pa2_tests/pass206.java create mode 100644 miniJava/tests/pa2_tests/pass206.java.out create mode 100644 miniJava/tests/pa2_tests/pass207.java create mode 100644 miniJava/tests/pa2_tests/pass207.java.out create mode 100644 miniJava/tests/pa2_tests/pass208.java create mode 100644 miniJava/tests/pa2_tests/pass208.java.out create mode 100644 miniJava/tests/pa2_tests/pass209.java create mode 100644 miniJava/tests/pa2_tests/pass209.java.out create mode 100644 miniJava/tests/pa2_tests/pass210.java create mode 100644 miniJava/tests/pa2_tests/pass210.java.out create mode 100644 miniJava/tests/pa2_tests/pass211.java create mode 100644 miniJava/tests/pa2_tests/pass211.java.out create mode 100644 miniJava/tests/pa2_tests/pass212.java create mode 100644 miniJava/tests/pa2_tests/pass212.java.out create mode 100644 miniJava/tests/pa2_tests/pass213.java create mode 100644 miniJava/tests/pa2_tests/pass213.java.out create mode 100644 miniJava/tests/pa2_tests/pass214.java create mode 100644 miniJava/tests/pa2_tests/pass214.java.out create mode 100644 miniJava/tests/pa2_tests/pass215.java create mode 100644 miniJava/tests/pa2_tests/pass215.java.out create mode 100644 miniJava/tests/pa2_tests/pass216.java create mode 100644 miniJava/tests/pa2_tests/pass216.java.out create mode 100644 miniJava/tests/pa2_tests/pass217.java create mode 100644 miniJava/tests/pa2_tests/pass217.java.out create mode 100644 miniJava/tests/pa2_tests/pass222.java create mode 100644 miniJava/tests/pa2_tests/pass222.java.out create mode 100644 miniJava/tests/pa2_tests/pass223.java create mode 100644 miniJava/tests/pa2_tests/pass223.java.out create mode 100644 miniJava/tests/pa2_tests/pass224.java create mode 100644 miniJava/tests/pa2_tests/pass224.java.out create mode 100644 miniJava/tests/pa2_tests/pass250.java create mode 100644 miniJava/tests/pa2_tests/pass250.java.out create mode 100644 miniJava/tests/pa2_tests/pass251.java create mode 100644 miniJava/tests/pa2_tests/pass251.java.out create mode 100644 miniJava/tests/pa2_tests/pass252.java create mode 100644 miniJava/tests/pa2_tests/pass252.java.out create mode 100644 miniJava/tests/pa2_tests/pass253.java create mode 100644 miniJava/tests/pa2_tests/pass253.java.out create mode 100644 miniJava/tests/pa2_tests/pass254.java create mode 100644 miniJava/tests/pa2_tests/pass254.java.out create mode 100644 miniJava/tests/pa2_tests/pass255.java create mode 100644 miniJava/tests/pa2_tests/pass255.java.out create mode 100644 miniJava/tests/pa2_tests/pass256.java create mode 100644 miniJava/tests/pa2_tests/pass256.java.out create mode 100644 miniJava/tests/pa2_tests/pass257.java create mode 100644 miniJava/tests/pa2_tests/pass257.java.out create mode 100644 miniJava/tests/pa2_tests/pass258.java create mode 100644 miniJava/tests/pa2_tests/pass258.java.out create mode 100644 miniJava/tests/pa2_tests/pass259.java create mode 100644 miniJava/tests/pa2_tests/pass259.java.out create mode 100644 miniJava/tests/pa2_tests/pass260.java create mode 100644 miniJava/tests/pa2_tests/pass260.java.out create mode 100644 miniJava/tests/pa2_tests/pass261.java create mode 100644 miniJava/tests/pa2_tests/pass261.java.out create mode 100644 miniJava/tests/pa2_tests/pass262.java create mode 100644 miniJava/tests/pa2_tests/pass262.java.out create mode 100644 miniJava/tests/pa2_tests/pass263.java create mode 100644 miniJava/tests/pa2_tests/pass263.java.out create mode 100644 miniJava/tests/pa2_tests/pass264.java create mode 100644 miniJava/tests/pa2_tests/pass264.java.out create mode 100644 miniJava/tests/pa2_tests/pass265.java create mode 100644 miniJava/tests/pa2_tests/pass265.java.out create mode 100644 miniJava/tests/pa2_tests/pass290.java create mode 100644 miniJava/tests/pa2_tests/pass290.java.out create mode 100644 miniJava/tests/pa2_tests/pass291.java create mode 100644 miniJava/tests/pa2_tests/pass291.java.out diff --git a/docs/PA3.pdf b/docs/PA3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ad6b2ad6fc530e9aaf086eda85ce86b351c3044b GIT binary patch literal 138844 zcma&N19WA}wm%%39jjw=$L@4&+qOEkZ9D1Mwyh32wr$&A`rP~e@7yuY``%k))Y`Rb z?^RV3zgbmt&P^&SC`=2WV}U2#-kF$zhhb+RU?8y3H;3ourk6CcHqx^*b2Bm|0MJVk z0GQa>nVIQj2-q3vg$Mu)%p7b?^wI=O^ooDJV&-6^7bVajU;zLK7}*%LczNNCtPTJ4 zMDU*%JPd#V@ZW<78X4Fa8p-O}S=oOMDPUviXk~3rz(Ox;XJlw*;9z4%0AS?hr584{ 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") || peek(1).spelling.equals(">=")) { Operator o = new Operator(accept(Token.TYPE.BINOP), null); - e = new BinaryExpr(o, e, parseRExpression(), null); + e = new BinaryExpr(o, e, parseAExpression(), null); } return e; @@ -561,10 +565,11 @@ public class Parser { * @throws IOException */ private Expression parseAExpression() throws IOException { + Expression e = parseMExpression(); while(peek(1).spelling.equals("+") || peek(1).spelling.equals("-")) { Operator o = new Operator(accept(Token.TYPE.BINOP), null); - e = new BinaryExpr(o, e, parseAExpression(), null); + e = new BinaryExpr(o, e, parseMExpression(), null); } return e; @@ -576,10 +581,11 @@ public class Parser { * @throws IOException */ private Expression parseMExpression() throws IOException { + Expression e = parseSingleExpression(); while(peek(1).spelling.equals("*") || peek(1).spelling.equals("/")) { Operator o = new Operator(accept(Token.TYPE.BINOP), null); - e = new BinaryExpr(o, e, parseMExpression(), null); + e = new BinaryExpr(o, e, parseSingleExpression(), null); } return e; diff --git a/miniJava/src/tester/Checkpoint2.java b/miniJava/src/tester/Checkpoint2.java new file mode 100644 index 0000000..d9d7711 --- /dev/null +++ b/miniJava/src/tester/Checkpoint2.java @@ -0,0 +1,98 @@ +package tester; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.FileInputStream; +import java.util.Scanner; + +/* Automated regression tester for Checkpoint 2 tests + * Created by Max Beckman-Harned + * Put your tests in "tests/pa2_tests" folder in your Eclipse workspace directory + * If you preface your error messages / exceptions with ERROR or *** then they will be displayed if they appear during processing + */ + +public class Checkpoint2 { + + private static class ReturnInfo { + int returnCode; + String ast; + public ReturnInfo(int _returnCode, String _ast) { + returnCode = _returnCode; + ast = _ast; + } + } + + public static void main(String[] args) throws IOException, InterruptedException { + File testDir = new File(System.getProperty("java.class.path") + + "/../tests/pa2_tests"); + int failures = 0; + for (File x : testDir.listFiles()) { + if (x.getName().endsWith("out") || x.getName().startsWith(".")) + continue; + ReturnInfo info = runTest(x); + int returnCode = info.returnCode; + String ast = info.ast; + if (x.getName().indexOf("pass") != -1) { + if (returnCode == 0) { + String actualAST = getAST(new FileInputStream(x.getPath() + ".out")); + if (actualAST.equals(ast)) + System.out.println(x.getName() + " parsed successfully and has a correct AST!"); + else { + System.err.println(x.getName() + " parsed successfully but has an incorrect AST!"); + failures++; + } + } + else { + failures++; + System.err.println(x.getName() + + " failed to be parsed!"); + } + } else { + if (returnCode == 4) + System.out.println(x.getName() + " failed successfully!"); + else { + System.err.println(x.getName() + " did not fail properly!"); + failures++; + } + } + } + System.out.println(failures + " failures in all."); + } + + private static ReturnInfo runTest(File x) throws IOException, InterruptedException { + ProcessBuilder pb = new ProcessBuilder("java", "miniJava.Compiler", x.getPath()).directory(new File(System.getProperty("java.class.path"))); + pb.redirectErrorStream(true); + Process p = pb.start(); + + String ast = getAST(p.getInputStream()); + p.waitFor(); + int exitValue = p.exitValue(); + return new ReturnInfo(exitValue, ast); + } + + + public static String getAST(InputStream stream) { + Scanner scan = new Scanner(stream); + String ast = null; + while (scan.hasNextLine()) { + String line = scan.nextLine(); + if (line.equals("======= AST Display =========================")) { + line = scan.nextLine(); + while(scan.hasNext() && !line.equals("=============================================")) { + ast += line + "\n"; + line = scan.nextLine(); + } + } + if (line.startsWith("*** ")) + System.out.println(line); + if (line.startsWith("ERROR")) { + System.out.println(line); + while(scan.hasNext()) + System.out.println(scan.next()); + } + } + scan.close(); + return ast; + } +} diff --git a/miniJava/test.java b/miniJava/test.java index 9bf40d7..6286286 100644 --- a/miniJava/test.java +++ b/miniJava/test.java @@ -1,10 +1,7 @@ -// Simple PA2 Example -class PA2 { +// PA1 lex binop pass +class id { + void p(){ + int x = 1 + 2 * 3 / 4 > 5 >= 6 < 7 <= 8 != 9 && 0 || 1; + } +} - public boolean c; - private static id[] test; - - public static void main(String[] args) { - int x = -1 || 2 + (8 <= 8) == -6 && (9 > 10) * 3; - } -} \ No newline at end of file diff --git a/miniJava/tests/pa2_tests/fail117.java b/miniJava/tests/pa2_tests/fail117.java new file mode 100644 index 0000000..51c7eaf --- /dev/null +++ b/miniJava/tests/pa2_tests/fail117.java @@ -0,0 +1,2 @@ +// PA1 lex comment fail +class id {} /* unterminated diff --git a/miniJava/tests/pa2_tests/fail119.java b/miniJava/tests/pa2_tests/fail119.java new file mode 100644 index 0000000..9c6137f --- /dev/null +++ b/miniJava/tests/pa2_tests/fail119.java @@ -0,0 +1,2 @@ +// PA1 lex ill char fail +class NonTokens{} # diff --git a/miniJava/tests/pa2_tests/fail125.java b/miniJava/tests/pa2_tests/fail125.java new file mode 100644 index 0000000..935b0ea --- /dev/null +++ b/miniJava/tests/pa2_tests/fail125.java @@ -0,0 +1,7 @@ +// PA1 lex binop fail +class id { + void p(){ + int x = 1 &| 0; + } +} + diff --git a/miniJava/tests/pa2_tests/fail130.java b/miniJava/tests/pa2_tests/fail130.java new file mode 100644 index 0000000..11ded62 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail130.java @@ -0,0 +1,5 @@ +// PA1 lex trailing start char fail +class Almost { + public static void main (String [] args) { + } // nothing follows next slash +} / \ No newline at end of file diff --git a/miniJava/tests/pa2_tests/fail131.java b/miniJava/tests/pa2_tests/fail131.java new file mode 100644 index 0000000..bd14a4f --- /dev/null +++ b/miniJava/tests/pa2_tests/fail131.java @@ -0,0 +1,5 @@ +// PA1 lex comment fail +class IllegalComment { + public static void main (String [] args) { + } // nothing follows final * +}/* **** \ No newline at end of file diff --git a/miniJava/tests/pa2_tests/fail145.java b/miniJava/tests/pa2_tests/fail145.java new file mode 100644 index 0000000..4101c57 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail145.java @@ -0,0 +1,6 @@ +// PA1 parse field decl fail +class id { + public void [] x; +} + + diff --git a/miniJava/tests/pa2_tests/fail146.java b/miniJava/tests/pa2_tests/fail146.java new file mode 100644 index 0000000..827f6a8 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail146.java @@ -0,0 +1,8 @@ +// PA1 parse local decl fail +class id { + void foo() { + Nonesuch x[2] = 3; + } +} + + diff --git a/miniJava/tests/pa2_tests/fail147.java b/miniJava/tests/pa2_tests/fail147.java new file mode 100644 index 0000000..eddf6f3 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail147.java @@ -0,0 +1,8 @@ +// PA1 parse local decl fail +class id { + public void f(){ + Ref [] x(33); + } +} + + diff --git a/miniJava/tests/pa2_tests/fail148.java b/miniJava/tests/pa2_tests/fail148.java new file mode 100644 index 0000000..3089be4 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail148.java @@ -0,0 +1,8 @@ +// PA1 parse local decl fail +class id { + public void f(){ + int x; + } +} + + diff --git a/miniJava/tests/pa2_tests/fail150.java b/miniJava/tests/pa2_tests/fail150.java new file mode 100644 index 0000000..bab8c4a --- /dev/null +++ b/miniJava/tests/pa2_tests/fail150.java @@ -0,0 +1,6 @@ +// PA1 parse local decl fail +class idfail { + public void foo () { + int [] x[3] = null; + } +} diff --git a/miniJava/tests/pa2_tests/fail151.java b/miniJava/tests/pa2_tests/fail151.java new file mode 100644 index 0000000..a4a41e9 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail151.java @@ -0,0 +1,6 @@ +// PA1 parse local decl fail +class LValueFail { + void foo () { + true = false; + } +} diff --git a/miniJava/tests/pa2_tests/fail154.java b/miniJava/tests/pa2_tests/fail154.java new file mode 100644 index 0000000..5dd2152 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail154.java @@ -0,0 +1,6 @@ +// PA1 parse expr fail +class IllegalExpressions { + void main () { + z = a+!=b; + } +} diff --git a/miniJava/tests/pa2_tests/fail155.java b/miniJava/tests/pa2_tests/fail155.java new file mode 100644 index 0000000..dc85175 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail155.java @@ -0,0 +1,6 @@ +// PA1 parse stmt fail +class IllegalStmt { + void main () { + this; + } +} diff --git a/miniJava/tests/pa2_tests/fail158.java b/miniJava/tests/pa2_tests/fail158.java new file mode 100644 index 0000000..f9b373c --- /dev/null +++ b/miniJava/tests/pa2_tests/fail158.java @@ -0,0 +1,6 @@ +// PA1 parse ref fail +class IllegalExpressions { + void foo () { + a b [c] = d; // not ok + } +} diff --git a/miniJava/tests/pa2_tests/fail161.java b/miniJava/tests/pa2_tests/fail161.java new file mode 100644 index 0000000..22416ab --- /dev/null +++ b/miniJava/tests/pa2_tests/fail161.java @@ -0,0 +1,8 @@ +// PA1 parse decl fail +class Test { + + void p() { + boolean [] a = b; + } +} + diff --git a/miniJava/tests/pa2_tests/fail162.java b/miniJava/tests/pa2_tests/fail162.java new file mode 100644 index 0000000..f4bc9f8 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail162.java @@ -0,0 +1,8 @@ +// PA1 parse call fail +class Test { + + void p(int a, boolean b) { + int p(a,b); + } +} + diff --git a/miniJava/tests/pa2_tests/fail163.java b/miniJava/tests/pa2_tests/fail163.java new file mode 100644 index 0000000..1d8c0ee --- /dev/null +++ b/miniJava/tests/pa2_tests/fail163.java @@ -0,0 +1,8 @@ +// PA1 parse decl fail +class Test { + + void p(int a) { + Test [ ] x.y = a; + } +} + diff --git a/miniJava/tests/pa2_tests/fail164.java b/miniJava/tests/pa2_tests/fail164.java new file mode 100644 index 0000000..80a6bf1 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail164.java @@ -0,0 +1,8 @@ +// PA1 parse assign fail +class Test { + + void p(int a) { + Test [ ] = a * 3; + } +} + diff --git a/miniJava/tests/pa2_tests/fail165.java b/miniJava/tests/pa2_tests/fail165.java new file mode 100644 index 0000000..037c17c --- /dev/null +++ b/miniJava/tests/pa2_tests/fail165.java @@ -0,0 +1,8 @@ +// PA1 parse call fail +class Test { + + void p(int a) { + c.p(2,3)[3] = 4; + } +} + diff --git a/miniJava/tests/pa2_tests/fail167.java b/miniJava/tests/pa2_tests/fail167.java new file mode 100644 index 0000000..fd5425d --- /dev/null +++ b/miniJava/tests/pa2_tests/fail167.java @@ -0,0 +1,8 @@ +// PA1 parse assign fail +class Test { + + void p() { + x.y() = z; + } +} + diff --git a/miniJava/tests/pa2_tests/fail168.java b/miniJava/tests/pa2_tests/fail168.java new file mode 100644 index 0000000..2320941 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail168.java @@ -0,0 +1,8 @@ +// PA1 parse decl fail +class Test { + + void p() { + c [] d b = new int[4]; + } +} + diff --git a/miniJava/tests/pa2_tests/fail201.java b/miniJava/tests/pa2_tests/fail201.java new file mode 100644 index 0000000..8715814 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail201.java @@ -0,0 +1,4 @@ +// PA2 local var decl fail +class A { + int p(){A A A = b;} +} diff --git a/miniJava/tests/pa2_tests/fail206.java b/miniJava/tests/pa2_tests/fail206.java new file mode 100644 index 0000000..3b72c53 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail206.java @@ -0,0 +1,7 @@ +// PA2 statement after return +class A { + int p(){ + return 2; + x = 3; + } +} diff --git a/miniJava/tests/pa2_tests/fail207.java b/miniJava/tests/pa2_tests/fail207.java new file mode 100644 index 0000000..8b5a027 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail207.java @@ -0,0 +1,4 @@ +// PA2 missing first parameter name +class A { + int p(A [], int b){} +} diff --git a/miniJava/tests/pa2_tests/fail208.java b/miniJava/tests/pa2_tests/fail208.java new file mode 100644 index 0000000..816b10e --- /dev/null +++ b/miniJava/tests/pa2_tests/fail208.java @@ -0,0 +1,4 @@ +// PA2 illegal array type +class A { + int p(void [] x){} +} diff --git a/miniJava/tests/pa2_tests/fail210.java b/miniJava/tests/pa2_tests/fail210.java new file mode 100644 index 0000000..62d533c --- /dev/null +++ b/miniJava/tests/pa2_tests/fail210.java @@ -0,0 +1,4 @@ +// PA2 parameter decl fail +class A { + void foo(x){} +} diff --git a/miniJava/tests/pa2_tests/fail212.java b/miniJava/tests/pa2_tests/fail212.java new file mode 100644 index 0000000..5fc61fb --- /dev/null +++ b/miniJava/tests/pa2_tests/fail212.java @@ -0,0 +1,7 @@ +// PA2 local var decl fail +class A { + + A p(){ + private int stuff = 3; + } +} diff --git a/miniJava/tests/pa2_tests/fail213.java b/miniJava/tests/pa2_tests/fail213.java new file mode 100644 index 0000000..9478467 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail213.java @@ -0,0 +1,7 @@ +// PA2 stmt fail +class A { + void p(){ + if x + int x = 3; + } +} diff --git a/miniJava/tests/pa2_tests/fail214.java b/miniJava/tests/pa2_tests/fail214.java new file mode 100644 index 0000000..35409f5 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail214.java @@ -0,0 +1,6 @@ +// PA2 stmt fail +class A { + void p(){ + this; + } +} diff --git a/miniJava/tests/pa2_tests/fail216.java b/miniJava/tests/pa2_tests/fail216.java new file mode 100644 index 0000000..96d9a3f --- /dev/null +++ b/miniJava/tests/pa2_tests/fail216.java @@ -0,0 +1,6 @@ +// PA2 lex fail +class A { + void f(){ + p = p & !p; + } +} diff --git a/miniJava/tests/pa2_tests/fail217.java b/miniJava/tests/pa2_tests/fail217.java new file mode 100644 index 0000000..51b6b0c --- /dev/null +++ b/miniJava/tests/pa2_tests/fail217.java @@ -0,0 +1,6 @@ +// PA2 expr fail +class A { + void f(){ + c = a <=< b; + } +} diff --git a/miniJava/tests/pa2_tests/fail218.java b/miniJava/tests/pa2_tests/fail218.java new file mode 100644 index 0000000..264c31b --- /dev/null +++ b/miniJava/tests/pa2_tests/fail218.java @@ -0,0 +1,6 @@ +// PA2 predecrement fail +class A { + void f(){ + c = --b; + } +} diff --git a/miniJava/tests/pa2_tests/fail219.java b/miniJava/tests/pa2_tests/fail219.java new file mode 100644 index 0000000..9548b46 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail219.java @@ -0,0 +1,6 @@ +// PA2 expr fail +class A { + void f(){ + c = ++b; + } +} diff --git a/miniJava/tests/pa2_tests/fail220.java b/miniJava/tests/pa2_tests/fail220.java new file mode 100644 index 0000000..ea6a0b3 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail220.java @@ -0,0 +1,6 @@ +// PA2 stmt fail +class A { + private void p(){ + return; + } +} diff --git a/miniJava/tests/pa2_tests/fail222.java b/miniJava/tests/pa2_tests/fail222.java new file mode 100644 index 0000000..53bb9f7 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail222.java @@ -0,0 +1,6 @@ +// PA2 expr fail +class A { + void p(){ + int b = c / * d /* */; + } +} diff --git a/miniJava/tests/pa2_tests/fail224.java b/miniJava/tests/pa2_tests/fail224.java new file mode 100644 index 0000000..a87222d --- /dev/null +++ b/miniJava/tests/pa2_tests/fail224.java @@ -0,0 +1,6 @@ +// PA2 expr fail +class A { + void p(){ + int b = p ! p; + } +} diff --git a/miniJava/tests/pa2_tests/fail230.java b/miniJava/tests/pa2_tests/fail230.java new file mode 100644 index 0000000..7285c56 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail230.java @@ -0,0 +1,4 @@ +// PA2 incorrect reference +class A { + void p(){ x = a.this; } +} diff --git a/miniJava/tests/pa2_tests/fail231.java b/miniJava/tests/pa2_tests/fail231.java new file mode 100644 index 0000000..59cf0e5 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail231.java @@ -0,0 +1,4 @@ +// PA2 incorrect reference +class A { + void p(){ x = this[i]; } +} diff --git a/miniJava/tests/pa2_tests/fail232.java b/miniJava/tests/pa2_tests/fail232.java new file mode 100644 index 0000000..e3839d6 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail232.java @@ -0,0 +1,4 @@ +// PA2 incorrect reference +class A { + void p(){ x = a[i][j]; } +} diff --git a/miniJava/tests/pa2_tests/fail233.java b/miniJava/tests/pa2_tests/fail233.java new file mode 100644 index 0000000..844f664 --- /dev/null +++ b/miniJava/tests/pa2_tests/fail233.java @@ -0,0 +1,4 @@ +// PA2 incorrect new expr +class A { + void p(){ x = new void [3]; } +} diff --git a/miniJava/tests/pa2_tests/fail234.java b/miniJava/tests/pa2_tests/fail234.java new file mode 100644 index 0000000..723ba2d --- /dev/null +++ b/miniJava/tests/pa2_tests/fail234.java @@ -0,0 +1,4 @@ +// PA2 invalid type in parameter declaration +class A { + void p(void [] x){ } +} diff --git a/miniJava/tests/pa2_tests/pass101.java b/miniJava/tests/pa2_tests/pass101.java new file mode 100644 index 0000000..0a0a702 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass101.java @@ -0,0 +1,3 @@ +// PA1 lex id pass +class id {} + diff --git a/miniJava/tests/pa2_tests/pass101.java.out b/miniJava/tests/pa2_tests/pass101.java.out new file mode 100644 index 0000000..9ea7e6a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass101.java.out @@ -0,0 +1,8 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass110.java b/miniJava/tests/pa2_tests/pass110.java new file mode 100644 index 0000000..111e200 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass110.java @@ -0,0 +1,3 @@ +// PA1 lex comment pass +class // comment $$ followed by \r\n +id {} diff --git a/miniJava/tests/pa2_tests/pass110.java.out b/miniJava/tests/pa2_tests/pass110.java.out new file mode 100644 index 0000000..9ea7e6a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass110.java.out @@ -0,0 +1,8 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass113.java b/miniJava/tests/pa2_tests/pass113.java new file mode 100644 index 0000000..0e9fe63 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass113.java @@ -0,0 +1,2 @@ +// PA1 lex comment pass +class id {} // trailing comment terminated by \r\n diff --git a/miniJava/tests/pa2_tests/pass113.java.out b/miniJava/tests/pa2_tests/pass113.java.out new file mode 100644 index 0000000..9ea7e6a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass113.java.out @@ -0,0 +1,8 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass120.java b/miniJava/tests/pa2_tests/pass120.java new file mode 100644 index 0000000..3fb77d1 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass120.java @@ -0,0 +1,3 @@ +// PA1 lex comment pass +class /*/$*/ id {} + diff --git a/miniJava/tests/pa2_tests/pass120.java.out b/miniJava/tests/pa2_tests/pass120.java.out new file mode 100644 index 0000000..9ea7e6a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass120.java.out @@ -0,0 +1,8 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass130.java b/miniJava/tests/pa2_tests/pass130.java new file mode 100644 index 0000000..e69de29 diff --git a/miniJava/tests/pa2_tests/pass130.java.out b/miniJava/tests/pa2_tests/pass130.java.out new file mode 100644 index 0000000..766e038 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass130.java.out @@ -0,0 +1,4 @@ +======= AST Display ========================= +Package + ClassDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass131.java b/miniJava/tests/pa2_tests/pass131.java new file mode 100644 index 0000000..4acb6dc --- /dev/null +++ b/miniJava/tests/pa2_tests/pass131.java @@ -0,0 +1,12 @@ +// PA1 lex whitespace including tab +class Test { + /* multiple comments between + */ + + // tokens + + /**//* is OK */ + + +} + diff --git a/miniJava/tests/pa2_tests/pass131.java.out b/miniJava/tests/pa2_tests/pass131.java.out new file mode 100644 index 0000000..224c94a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass131.java.out @@ -0,0 +1,8 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Test" classname + . FieldDeclList [0] + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass132.java b/miniJava/tests/pa2_tests/pass132.java new file mode 100644 index 0000000..89408eb --- /dev/null +++ b/miniJava/tests/pa2_tests/pass132.java @@ -0,0 +1,3 @@ +// PA1 lex comment pass +class // comment followed by \n only +id {} diff --git a/miniJava/tests/pa2_tests/pass132.java.out b/miniJava/tests/pa2_tests/pass132.java.out new file mode 100644 index 0000000..9ea7e6a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass132.java.out @@ -0,0 +1,8 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass133.java b/miniJava/tests/pa2_tests/pass133.java new file mode 100644 index 0000000..287861f --- /dev/null +++ b/miniJava/tests/pa2_tests/pass133.java @@ -0,0 +1,3 @@ +// PA1 lex comment pass +class // comment followed by \r only + id {} \ No newline at end of file diff --git a/miniJava/tests/pa2_tests/pass133.java.out b/miniJava/tests/pa2_tests/pass133.java.out new file mode 100644 index 0000000..9ea7e6a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass133.java.out @@ -0,0 +1,8 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass136.java b/miniJava/tests/pa2_tests/pass136.java new file mode 100644 index 0000000..216cd0c --- /dev/null +++ b/miniJava/tests/pa2_tests/pass136.java @@ -0,0 +1,2 @@ +// PA1 lex comment pass +class id {} // unterminated comment - no trailing \r\n \ No newline at end of file diff --git a/miniJava/tests/pa2_tests/pass136.java.out b/miniJava/tests/pa2_tests/pass136.java.out new file mode 100644 index 0000000..9ea7e6a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass136.java.out @@ -0,0 +1,8 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass137.java b/miniJava/tests/pa2_tests/pass137.java new file mode 100644 index 0000000..20cc7a7 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass137.java @@ -0,0 +1,2 @@ +// PA1 lex comment pass +class id {} /* no trailing \r\n */ \ No newline at end of file diff --git a/miniJava/tests/pa2_tests/pass137.java.out b/miniJava/tests/pa2_tests/pass137.java.out new file mode 100644 index 0000000..9ea7e6a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass137.java.out @@ -0,0 +1,8 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass140.java b/miniJava/tests/pa2_tests/pass140.java new file mode 100644 index 0000000..3ff1b0f --- /dev/null +++ b/miniJava/tests/pa2_tests/pass140.java @@ -0,0 +1,5 @@ +// PA1 parse field decl pass +class id { + public static Type x; +} + diff --git a/miniJava/tests/pa2_tests/pass140.java.out b/miniJava/tests/pa2_tests/pass140.java.out new file mode 100644 index 0000000..fb25514 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass140.java.out @@ -0,0 +1,12 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [1] + . . (public static) FieldDecl + . . ClassType + . . "Type" classname + . . "x" fieldname + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass141.java b/miniJava/tests/pa2_tests/pass141.java new file mode 100644 index 0000000..88a514b --- /dev/null +++ b/miniJava/tests/pa2_tests/pass141.java @@ -0,0 +1,5 @@ +// PA1 parse field decl pass +class id { + private static Type x; +} + diff --git a/miniJava/tests/pa2_tests/pass141.java.out b/miniJava/tests/pa2_tests/pass141.java.out new file mode 100644 index 0000000..2f92ca4 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass141.java.out @@ -0,0 +1,12 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [1] + . . (private static) FieldDecl + . . ClassType + . . "Type" classname + . . "x" fieldname + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass142.java b/miniJava/tests/pa2_tests/pass142.java new file mode 100644 index 0000000..396053c --- /dev/null +++ b/miniJava/tests/pa2_tests/pass142.java @@ -0,0 +1,5 @@ +// PA1 parse field decl pass +class id { + static Type x; +} + diff --git a/miniJava/tests/pa2_tests/pass142.java.out b/miniJava/tests/pa2_tests/pass142.java.out new file mode 100644 index 0000000..fb25514 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass142.java.out @@ -0,0 +1,12 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [1] + . . (public static) FieldDecl + . . ClassType + . . "Type" classname + . . "x" fieldname + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass143.java b/miniJava/tests/pa2_tests/pass143.java new file mode 100644 index 0000000..c9845b8 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass143.java @@ -0,0 +1,5 @@ +// PA1 parse field decl pass +class id { + Type x; +} + diff --git a/miniJava/tests/pa2_tests/pass143.java.out b/miniJava/tests/pa2_tests/pass143.java.out new file mode 100644 index 0000000..a9a7e92 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass143.java.out @@ -0,0 +1,12 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [1] + . . (public) FieldDecl + . . ClassType + . . "Type" classname + . . "x" fieldname + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass146.java b/miniJava/tests/pa2_tests/pass146.java new file mode 100644 index 0000000..50645d1 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass146.java @@ -0,0 +1,5 @@ +// PA1 parse field decl pass +class id { + static void x; +} + diff --git a/miniJava/tests/pa2_tests/pass146.java.out b/miniJava/tests/pa2_tests/pass146.java.out new file mode 100644 index 0000000..13d88fa --- /dev/null +++ b/miniJava/tests/pa2_tests/pass146.java.out @@ -0,0 +1,11 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [1] + . . (public static) FieldDecl + . . VOID BaseType + . . "x" fieldname + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass147.java b/miniJava/tests/pa2_tests/pass147.java new file mode 100644 index 0000000..ce969d7 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass147.java @@ -0,0 +1,5 @@ +// PA1 parse method decl pass +class id { + public static void main(String[] args){} +} + diff --git a/miniJava/tests/pa2_tests/pass147.java.out b/miniJava/tests/pa2_tests/pass147.java.out new file mode 100644 index 0000000..39003e2 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass147.java.out @@ -0,0 +1,18 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public static) MethodDecl + . . VOID BaseType + . . "main" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . ArrayType + . . . ClassType + . . . "String" classname + . . . "args"parametername + . . StmtList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass148.java b/miniJava/tests/pa2_tests/pass148.java new file mode 100644 index 0000000..a8a1967 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass148.java @@ -0,0 +1,5 @@ +// PA1 parse method decl pass +class id { + private int f(int x, boolean b) {return 3;} +} + diff --git a/miniJava/tests/pa2_tests/pass148.java.out b/miniJava/tests/pa2_tests/pass148.java.out new file mode 100644 index 0000000..a253c5f --- /dev/null +++ b/miniJava/tests/pa2_tests/pass148.java.out @@ -0,0 +1,21 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (private) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [2] + . . . ParameterDecl + . . . INT BaseType + . . . "x"parametername + . . . ParameterDecl + . . . BOOLEAN BaseType + . . . "b"parametername + . . StmtList [0] + . . LiteralExpr + . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass150.java b/miniJava/tests/pa2_tests/pass150.java new file mode 100644 index 0000000..6fa11df --- /dev/null +++ b/miniJava/tests/pa2_tests/pass150.java @@ -0,0 +1,9 @@ +// PA1 parse classdecls pass +class MainClass { + public static void main (String [] args) {} +} + +class OfItsOwn { + int A_01; +} // class OfItsOwn + diff --git a/miniJava/tests/pa2_tests/pass150.java.out b/miniJava/tests/pa2_tests/pass150.java.out new file mode 100644 index 0000000..8fe6acc --- /dev/null +++ b/miniJava/tests/pa2_tests/pass150.java.out @@ -0,0 +1,25 @@ +======= AST Display ========================= +Package + ClassDeclList [2] + . ClassDecl + . "MainClass" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public static) MethodDecl + . . VOID BaseType + . . "main" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . ArrayType + . . . ClassType + . . . "String" classname + . . . "args"parametername + . . StmtList [0] + . ClassDecl + . "OfItsOwn" classname + . FieldDeclList [1] + . . (public) FieldDecl + . . INT BaseType + . . "A_01" fieldname + . MethodDeclList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass152.java b/miniJava/tests/pa2_tests/pass152.java new file mode 100644 index 0000000..858bbbd --- /dev/null +++ b/miniJava/tests/pa2_tests/pass152.java @@ -0,0 +1,8 @@ +// PA1 parse new pass +class MainClass { + public static void main (String [] args) { + SecondSubClass newobj = new SecondSubClass (); + } +} + + diff --git a/miniJava/tests/pa2_tests/pass152.java.out b/miniJava/tests/pa2_tests/pass152.java.out new file mode 100644 index 0000000..9e0ab54 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass152.java.out @@ -0,0 +1,26 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "MainClass" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public static) MethodDecl + . . VOID BaseType + . . "main" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . ArrayType + . . . ClassType + . . . "String" classname + . . . "args"parametername + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . ClassType + . . . "SecondSubClass" classname + . . . "newobj" varname + . . . NewObjectExpr + . . . ClassType + . . . "SecondSubClass" classname +============================================= diff --git a/miniJava/tests/pa2_tests/pass153.java b/miniJava/tests/pa2_tests/pass153.java new file mode 100644 index 0000000..91330f4 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass153.java @@ -0,0 +1,8 @@ +// PA1 parse new pass +class Foo { + void bar() { + int[] newarr = new int[20]; + } +} + + diff --git a/miniJava/tests/pa2_tests/pass153.java.out b/miniJava/tests/pa2_tests/pass153.java.out new file mode 100644 index 0000000..769ca87 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass153.java.out @@ -0,0 +1,22 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Foo" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "bar" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . ArrayType + . . . INT BaseType + . . . "newarr" varname + . . . NewArrayExpr + . . . INT BaseType + . . . LiteralExpr + . . . "20" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass154.java b/miniJava/tests/pa2_tests/pass154.java new file mode 100644 index 0000000..3328ef7 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass154.java @@ -0,0 +1,23 @@ +// PA1 parse methods pass +class MainClass { + public static void main (String [] args) { + } +} +class SuperClass +{ + public void setWorth (int worth){ + integer = worth; + } + + public int getWorth (){ + return this.integer; + } + + public void setTruth (boolean truth){ + bool = truth; + } + + public int getTruth (){ + return this.bool; + } +} diff --git a/miniJava/tests/pa2_tests/pass154.java.out b/miniJava/tests/pa2_tests/pass154.java.out new file mode 100644 index 0000000..c1a5f71 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass154.java.out @@ -0,0 +1,68 @@ +======= AST Display ========================= +Package + ClassDeclList [2] + . ClassDecl + . "MainClass" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public static) MethodDecl + . . VOID BaseType + . . "main" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . ArrayType + . . . ClassType + . . . "String" classname + . . . "args"parametername + . . StmtList [0] + . ClassDecl + . "SuperClass" classname + . FieldDeclList [0] + . MethodDeclList [4] + . . (public) MethodDecl + . . VOID BaseType + . . "setWorth" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . INT BaseType + . . . "worth"parametername + . . StmtList [1] + . . . AssignStmt + . . . IdRef + . . . "integer" Identifier + . . . RefExpr + . . . IdRef + . . . "worth" Identifier + . . (public) MethodDecl + . . INT BaseType + . . "getWorth" methodname + . . ParameterDeclList [0] + . . StmtList [0] + . . RefExpr + . . QualifiedRef + . . "integer" Identifier + . . ThisRef + . . (public) MethodDecl + . . VOID BaseType + . . "setTruth" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . BOOLEAN BaseType + . . . "truth"parametername + . . StmtList [1] + . . . AssignStmt + . . . IdRef + . . . "bool" Identifier + . . . RefExpr + . . . IdRef + . . . "truth" Identifier + . . (public) MethodDecl + . . INT BaseType + . . "getTruth" methodname + . . ParameterDeclList [0] + . . StmtList [0] + . . RefExpr + . . QualifiedRef + . . "bool" Identifier + . . ThisRef +============================================= diff --git a/miniJava/tests/pa2_tests/pass155.java b/miniJava/tests/pa2_tests/pass155.java new file mode 100644 index 0000000..3453fc6 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass155.java @@ -0,0 +1,21 @@ +// PA1 parse parse pass +class MainClass { + public static void main (String [] args) { + SecondSubClass newobj = new SecondSubClass (); + } +} +class SuperClass +{ + private void fillup (boolean open, int [] jar, int marble, int upto) { + + int index = 0; + if (open == true) { + while ( index < upto ) { + ownjar [index] = jar [index]; + jar [index] = marble; + } // while + } // if + } // fillup + +} // class SuperClass + diff --git a/miniJava/tests/pa2_tests/pass155.java.out b/miniJava/tests/pa2_tests/pass155.java.out new file mode 100644 index 0000000..2420f6b --- /dev/null +++ b/miniJava/tests/pa2_tests/pass155.java.out @@ -0,0 +1,99 @@ +======= AST Display ========================= +Package + ClassDeclList [2] + . ClassDecl + . "MainClass" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public static) MethodDecl + . . VOID BaseType + . . "main" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . ArrayType + . . . ClassType + . . . "String" classname + . . . "args"parametername + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . ClassType + . . . "SecondSubClass" classname + . . . "newobj" varname + . . . NewObjectExpr + . . . ClassType + . . . "SecondSubClass" classname + . ClassDecl + . "SuperClass" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (private) MethodDecl + . . VOID BaseType + . . "fillup" methodname + . . ParameterDeclList [4] + . . . ParameterDecl + . . . BOOLEAN BaseType + . . . "open"parametername + . . . ParameterDecl + . . . ArrayType + . . . INT BaseType + . . . "jar"parametername + . . . ParameterDecl + . . . INT BaseType + . . . "marble"parametername + . . . ParameterDecl + . . . INT BaseType + . . . "upto"parametername + . . StmtList [2] + . . . VarDeclStmt + . . . VarDecl + . . . INT BaseType + . . . "index" varname + . . . LiteralExpr + . . . "0" IntLiteral + . . . IfStmt + . . . BinaryExpr + . . . "==" Operator + . . . RefExpr + . . . IdRef + . . . "open" Identifier + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . BlockStmt + . . . StatementList [1] + . . . . WhileStmt + . . . . BinaryExpr + . . . . "<" Operator + . . . . RefExpr + . . . . IdRef + . . . . "index" Identifier + . . . . RefExpr + . . . . IdRef + . . . . "upto" Identifier + . . . . BlockStmt + . . . . StatementList [2] + . . . . . AssignStmt + . . . . . IndexedRef + . . . . . RefExpr + . . . . . IdRef + . . . . . "index" Identifier + . . . . . IdRef + . . . . . "ownjar" Identifier + . . . . . RefExpr + . . . . . IndexedRef + . . . . . RefExpr + . . . . . IdRef + . . . . . "index" Identifier + . . . . . IdRef + . . . . . "jar" Identifier + . . . . . AssignStmt + . . . . . IndexedRef + . . . . . RefExpr + . . . . . IdRef + . . . . . "index" Identifier + . . . . . IdRef + . . . . . "jar" Identifier + . . . . . RefExpr + . . . . . IdRef + . . . . . "marble" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass156.java b/miniJava/tests/pa2_tests/pass156.java new file mode 100644 index 0000000..bc7f703 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass156.java @@ -0,0 +1,6 @@ +// PA1 parse Stmt this ref pass +class LegalStmt { + void main () { + this(3,4); + } +} diff --git a/miniJava/tests/pa2_tests/pass156.java.out b/miniJava/tests/pa2_tests/pass156.java.out new file mode 100644 index 0000000..7937472 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass156.java.out @@ -0,0 +1,20 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "LegalStmt" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "main" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . CallStmt + . . . ThisRef + . . . ExprList [2] + . . . . LiteralExpr + . . . . "3" IntLiteral + . . . . LiteralExpr + . . . . "4" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass158.java b/miniJava/tests/pa2_tests/pass158.java new file mode 100644 index 0000000..be52ebf --- /dev/null +++ b/miniJava/tests/pa2_tests/pass158.java @@ -0,0 +1,12 @@ +// PA1 parse refs pass +class Test { + + void p() { + a = true; + a [b] = c; + p (); + a.b[3] = d; + c.p(e); + } +} + diff --git a/miniJava/tests/pa2_tests/pass158.java.out b/miniJava/tests/pa2_tests/pass158.java.out new file mode 100644 index 0000000..712053f --- /dev/null +++ b/miniJava/tests/pa2_tests/pass158.java.out @@ -0,0 +1,52 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Test" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [5] + . . . AssignStmt + . . . IdRef + . . . "a" Identifier + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . AssignStmt + . . . IndexedRef + . . . RefExpr + . . . IdRef + . . . "b" Identifier + . . . IdRef + . . . "a" Identifier + . . . RefExpr + . . . IdRef + . . . "c" Identifier + . . . CallStmt + . . . IdRef + . . . "p" Identifier + . . . ExprList [0] + . . . AssignStmt + . . . IndexedRef + . . . LiteralExpr + . . . "3" IntLiteral + . . . QualifiedRef + . . . "b" Identifier + . . . IdRef + . . . "a" Identifier + . . . RefExpr + . . . IdRef + . . . "d" Identifier + . . . CallStmt + . . . QualifiedRef + . . . "p" Identifier + . . . IdRef + . . . "c" Identifier + . . . ExprList [1] + . . . . RefExpr + . . . . IdRef + . . . . "e" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass159.java b/miniJava/tests/pa2_tests/pass159.java new file mode 100644 index 0000000..dcaedf5 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass159.java @@ -0,0 +1,11 @@ +// PA1 parse decl pass +class Test { + + int [] a; + Test [] t; + + void p() { + void x = y; + } +} + diff --git a/miniJava/tests/pa2_tests/pass159.java.out b/miniJava/tests/pa2_tests/pass159.java.out new file mode 100644 index 0000000..10d3779 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass159.java.out @@ -0,0 +1,29 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Test" classname + . FieldDeclList [2] + . . (public) FieldDecl + . . ArrayType + . . INT BaseType + . . "a" fieldname + . . (public) FieldDecl + . . ArrayType + . . ClassType + . . "Test" classname + . . "t" fieldname + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . VOID BaseType + . . . "x" varname + . . . RefExpr + . . . IdRef + . . . "y" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass160.java b/miniJava/tests/pa2_tests/pass160.java new file mode 100644 index 0000000..82d7f6b --- /dev/null +++ b/miniJava/tests/pa2_tests/pass160.java @@ -0,0 +1,9 @@ +// PA1 parse refs pass +class Test { + + void p() { + A a = 23; + boolean b = c; + } +} + diff --git a/miniJava/tests/pa2_tests/pass160.java.out b/miniJava/tests/pa2_tests/pass160.java.out new file mode 100644 index 0000000..aa846ae --- /dev/null +++ b/miniJava/tests/pa2_tests/pass160.java.out @@ -0,0 +1,27 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Test" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [2] + . . . VarDeclStmt + . . . VarDecl + . . . ClassType + . . . "A" classname + . . . "a" varname + . . . LiteralExpr + . . . "23" IntLiteral + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "b" varname + . . . RefExpr + . . . IdRef + . . . "c" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass161.java b/miniJava/tests/pa2_tests/pass161.java new file mode 100644 index 0000000..654e776 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass161.java @@ -0,0 +1,8 @@ +// PA1 parse assign pass +class Test { + + void p() { + a = b; + } +} + diff --git a/miniJava/tests/pa2_tests/pass161.java.out b/miniJava/tests/pa2_tests/pass161.java.out new file mode 100644 index 0000000..3d8a068 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass161.java.out @@ -0,0 +1,19 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Test" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . AssignStmt + . . . IdRef + . . . "a" Identifier + . . . RefExpr + . . . IdRef + . . . "b" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass162.java b/miniJava/tests/pa2_tests/pass162.java new file mode 100644 index 0000000..77d1a46 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass162.java @@ -0,0 +1,8 @@ +// PA1 parse call pass +class Test { + + void p(int a, boolean b) { + p(a,b); + } +} + diff --git a/miniJava/tests/pa2_tests/pass162.java.out b/miniJava/tests/pa2_tests/pass162.java.out new file mode 100644 index 0000000..62a6c78 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass162.java.out @@ -0,0 +1,29 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Test" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [2] + . . . ParameterDecl + . . . INT BaseType + . . . "a"parametername + . . . ParameterDecl + . . . BOOLEAN BaseType + . . . "b"parametername + . . StmtList [1] + . . . CallStmt + . . . IdRef + . . . "p" Identifier + . . . ExprList [2] + . . . . RefExpr + . . . . IdRef + . . . . "a" Identifier + . . . . RefExpr + . . . . IdRef + . . . . "b" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass163.java b/miniJava/tests/pa2_tests/pass163.java new file mode 100644 index 0000000..402f02b --- /dev/null +++ b/miniJava/tests/pa2_tests/pass163.java @@ -0,0 +1,8 @@ +// PA1 parse decl pass +class Test { + + void p(int a) { + Test [ ] v = a; + } +} + diff --git a/miniJava/tests/pa2_tests/pass163.java.out b/miniJava/tests/pa2_tests/pass163.java.out new file mode 100644 index 0000000..851864e --- /dev/null +++ b/miniJava/tests/pa2_tests/pass163.java.out @@ -0,0 +1,25 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Test" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . INT BaseType + . . . "a"parametername + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . ArrayType + . . . ClassType + . . . "Test" classname + . . . "v" varname + . . . RefExpr + . . . IdRef + . . . "a" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass164.java b/miniJava/tests/pa2_tests/pass164.java new file mode 100644 index 0000000..3ef2c2b --- /dev/null +++ b/miniJava/tests/pa2_tests/pass164.java @@ -0,0 +1,8 @@ +// PA1 parse assign pass +class Test { + + void p(int a) { + Test [ a + 1] = a * 3; + } +} + diff --git a/miniJava/tests/pa2_tests/pass164.java.out b/miniJava/tests/pa2_tests/pass164.java.out new file mode 100644 index 0000000..ff5e710 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass164.java.out @@ -0,0 +1,34 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Test" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . INT BaseType + . . . "a"parametername + . . StmtList [1] + . . . AssignStmt + . . . IndexedRef + . . . BinaryExpr + . . . "+" Operator + . . . RefExpr + . . . IdRef + . . . "a" Identifier + . . . LiteralExpr + . . . "1" IntLiteral + . . . IdRef + . . . "Test" Identifier + . . . BinaryExpr + . . . "*" Operator + . . . RefExpr + . . . IdRef + . . . "a" Identifier + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass165.java b/miniJava/tests/pa2_tests/pass165.java new file mode 100644 index 0000000..e95b29c --- /dev/null +++ b/miniJava/tests/pa2_tests/pass165.java @@ -0,0 +1,9 @@ +// PA1 parse call pass +class Test { + + void p(int a) { + C c = new C(); + c.p(2,3); + } +} + diff --git a/miniJava/tests/pa2_tests/pass165.java.out b/miniJava/tests/pa2_tests/pass165.java.out new file mode 100644 index 0000000..d189521 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass165.java.out @@ -0,0 +1,34 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Test" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . INT BaseType + . . . "a"parametername + . . StmtList [2] + . . . VarDeclStmt + . . . VarDecl + . . . ClassType + . . . "C" classname + . . . "c" varname + . . . NewObjectExpr + . . . ClassType + . . . "C" classname + . . . CallStmt + . . . QualifiedRef + . . . "p" Identifier + . . . IdRef + . . . "c" Identifier + . . . ExprList [2] + . . . . LiteralExpr + . . . . "2" IntLiteral + . . . . LiteralExpr + . . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass166.java b/miniJava/tests/pa2_tests/pass166.java new file mode 100644 index 0000000..ed777be --- /dev/null +++ b/miniJava/tests/pa2_tests/pass166.java @@ -0,0 +1,9 @@ +// PA1 parse assign pass +class Test { + + void p(int a) { + this.p(2,3); + a.v[3] = 4; + } +} + diff --git a/miniJava/tests/pa2_tests/pass166.java.out b/miniJava/tests/pa2_tests/pass166.java.out new file mode 100644 index 0000000..84ca777 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass166.java.out @@ -0,0 +1,35 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Test" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . INT BaseType + . . . "a"parametername + . . StmtList [2] + . . . CallStmt + . . . QualifiedRef + . . . "p" Identifier + . . . ThisRef + . . . ExprList [2] + . . . . LiteralExpr + . . . . "2" IntLiteral + . . . . LiteralExpr + . . . . "3" IntLiteral + . . . AssignStmt + . . . IndexedRef + . . . LiteralExpr + . . . "3" IntLiteral + . . . QualifiedRef + . . . "v" Identifier + . . . IdRef + . . . "a" Identifier + . . . LiteralExpr + . . . "4" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass169.java b/miniJava/tests/pa2_tests/pass169.java new file mode 100644 index 0000000..37fafdd --- /dev/null +++ b/miniJava/tests/pa2_tests/pass169.java @@ -0,0 +1,8 @@ +// PA1 parse new pass +class Test { + + void p() { + Foo [] foo = new Foo [10]; + } +} + diff --git a/miniJava/tests/pa2_tests/pass169.java.out b/miniJava/tests/pa2_tests/pass169.java.out new file mode 100644 index 0000000..018798a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass169.java.out @@ -0,0 +1,24 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "Test" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . ArrayType + . . . ClassType + . . . "Foo" classname + . . . "foo" varname + . . . NewArrayExpr + . . . ClassType + . . . "Foo" classname + . . . LiteralExpr + . . . "10" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass171.java b/miniJava/tests/pa2_tests/pass171.java new file mode 100644 index 0000000..c813852 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass171.java @@ -0,0 +1,8 @@ +// PA1 lex unop pass +class id { + void p(){ + int x = - b; + boolean y = !y; + } +} + diff --git a/miniJava/tests/pa2_tests/pass171.java.out b/miniJava/tests/pa2_tests/pass171.java.out new file mode 100644 index 0000000..c97e40b --- /dev/null +++ b/miniJava/tests/pa2_tests/pass171.java.out @@ -0,0 +1,31 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [2] + . . . VarDeclStmt + . . . VarDecl + . . . INT BaseType + . . . "x" varname + . . . UnaryExpr + . . . "-" Operator + . . . RefExpr + . . . IdRef + . . . "b" Identifier + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "y" varname + . . . UnaryExpr + . . . "!" Operator + . . . RefExpr + . . . IdRef + . . . "y" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass175.java b/miniJava/tests/pa2_tests/pass175.java new file mode 100644 index 0000000..6286286 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass175.java @@ -0,0 +1,7 @@ +// PA1 lex binop pass +class id { + void p(){ + int x = 1 + 2 * 3 / 4 > 5 >= 6 < 7 <= 8 != 9 && 0 || 1; + } +} + diff --git a/miniJava/tests/pa2_tests/pass175.java.out b/miniJava/tests/pa2_tests/pass175.java.out new file mode 100644 index 0000000..8ea89cc --- /dev/null +++ b/miniJava/tests/pa2_tests/pass175.java.out @@ -0,0 +1,59 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . INT BaseType + . . . "x" varname + . . . BinaryExpr + . . . "||" Operator + . . . BinaryExpr + . . . "&&" Operator + . . . BinaryExpr + . . . "!=" Operator + . . . BinaryExpr + . . . "<=" Operator + . . . BinaryExpr + . . . "<" Operator + . . . BinaryExpr + . . . ">=" Operator + . . . BinaryExpr + . . . ">" Operator + . . . BinaryExpr + . . . "+" Operator + . . . LiteralExpr + . . . "1" IntLiteral + . . . BinaryExpr + . . . "/" Operator + . . . BinaryExpr + . . . "*" Operator + . . . LiteralExpr + . . . "2" IntLiteral + . . . LiteralExpr + . . . "3" IntLiteral + . . . LiteralExpr + . . . "4" IntLiteral + . . . LiteralExpr + . . . "5" IntLiteral + . . . LiteralExpr + . . . "6" IntLiteral + . . . LiteralExpr + . . . "7" IntLiteral + . . . LiteralExpr + . . . "8" IntLiteral + . . . LiteralExpr + . . . "9" IntLiteral + . . . LiteralExpr + . . . "0" IntLiteral + . . . LiteralExpr + . . . "1" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass176.java b/miniJava/tests/pa2_tests/pass176.java new file mode 100644 index 0000000..3708ab8 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass176.java @@ -0,0 +1,7 @@ +// PA1 lex binop pass +class id { + void p(){ + boolean x = true && false || x; + } +} + diff --git a/miniJava/tests/pa2_tests/pass176.java.out b/miniJava/tests/pa2_tests/pass176.java.out new file mode 100644 index 0000000..f607c52 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass176.java.out @@ -0,0 +1,28 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "x" varname + . . . BinaryExpr + . . . "||" Operator + . . . BinaryExpr + . . . "&&" Operator + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . LiteralExpr + . . . "false" BooleanLiteral + . . . RefExpr + . . . IdRef + . . . "x" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass178.java b/miniJava/tests/pa2_tests/pass178.java new file mode 100644 index 0000000..f21b331 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass178.java @@ -0,0 +1,7 @@ +// PA1 lex unop pass +class id { + void p(){ + int x = b - - b; + } +} + diff --git a/miniJava/tests/pa2_tests/pass178.java.out b/miniJava/tests/pa2_tests/pass178.java.out new file mode 100644 index 0000000..9c16882 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass178.java.out @@ -0,0 +1,27 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . INT BaseType + . . . "x" varname + . . . BinaryExpr + . . . "-" Operator + . . . RefExpr + . . . IdRef + . . . "b" Identifier + . . . UnaryExpr + . . . "-" Operator + . . . RefExpr + . . . IdRef + . . . "b" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass179.java b/miniJava/tests/pa2_tests/pass179.java new file mode 100644 index 0000000..fabfd63 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass179.java @@ -0,0 +1,7 @@ +// PA1 lex unop pass +class id { + void p(){ + int x = b - - - -b; + } +} + diff --git a/miniJava/tests/pa2_tests/pass179.java.out b/miniJava/tests/pa2_tests/pass179.java.out new file mode 100644 index 0000000..8eee654 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass179.java.out @@ -0,0 +1,31 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "id" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . INT BaseType + . . . "x" varname + . . . BinaryExpr + . . . "-" Operator + . . . RefExpr + . . . IdRef + . . . "b" Identifier + . . . UnaryExpr + . . . "-" Operator + . . . UnaryExpr + . . . "-" Operator + . . . UnaryExpr + . . . "-" Operator + . . . RefExpr + . . . IdRef + . . . "b" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass201.java b/miniJava/tests/pa2_tests/pass201.java new file mode 100644 index 0000000..f077edc --- /dev/null +++ b/miniJava/tests/pa2_tests/pass201.java @@ -0,0 +1,6 @@ +// PA2 pass stmt +class A { + A p(){ + while (true) {} + } +} diff --git a/miniJava/tests/pa2_tests/pass201.java.out b/miniJava/tests/pa2_tests/pass201.java.out new file mode 100644 index 0000000..c351127 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass201.java.out @@ -0,0 +1,19 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . ClassType + . . "A" classname + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . WhileStmt + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . BlockStmt + . . . StatementList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass202.java b/miniJava/tests/pa2_tests/pass202.java new file mode 100644 index 0000000..61a0b0b --- /dev/null +++ b/miniJava/tests/pa2_tests/pass202.java @@ -0,0 +1,4 @@ +// PA2 pass method decl +class A { + static void p(){} +} diff --git a/miniJava/tests/pa2_tests/pass202.java.out b/miniJava/tests/pa2_tests/pass202.java.out new file mode 100644 index 0000000..b8727fb --- /dev/null +++ b/miniJava/tests/pa2_tests/pass202.java.out @@ -0,0 +1,13 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public static) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass203.java b/miniJava/tests/pa2_tests/pass203.java new file mode 100644 index 0000000..8961d58 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass203.java @@ -0,0 +1,6 @@ +// PA2 pass method decl +class A { + private void p(){ + return 0; + } +} diff --git a/miniJava/tests/pa2_tests/pass203.java.out b/miniJava/tests/pa2_tests/pass203.java.out new file mode 100644 index 0000000..bf42aff --- /dev/null +++ b/miniJava/tests/pa2_tests/pass203.java.out @@ -0,0 +1,15 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (private) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [0] + . . LiteralExpr + . . "0" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass204.java b/miniJava/tests/pa2_tests/pass204.java new file mode 100644 index 0000000..29751df --- /dev/null +++ b/miniJava/tests/pa2_tests/pass204.java @@ -0,0 +1,6 @@ +// PA2 pass local decl +class A { + int p(){ + Foo x = 3; + } +} diff --git a/miniJava/tests/pa2_tests/pass204.java.out b/miniJava/tests/pa2_tests/pass204.java.out new file mode 100644 index 0000000..f36b825 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass204.java.out @@ -0,0 +1,20 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . ClassType + . . . "Foo" classname + . . . "x" varname + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass205.java b/miniJava/tests/pa2_tests/pass205.java new file mode 100644 index 0000000..63382e4 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass205.java @@ -0,0 +1,4 @@ +// PA2 pass parameter decl +class A { + void p(A [ ] s){} +} diff --git a/miniJava/tests/pa2_tests/pass205.java.out b/miniJava/tests/pa2_tests/pass205.java.out new file mode 100644 index 0000000..4f284b6 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass205.java.out @@ -0,0 +1,18 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . ArrayType + . . . ClassType + . . . "A" classname + . . . "s"parametername + . . StmtList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass206.java b/miniJava/tests/pa2_tests/pass206.java new file mode 100644 index 0000000..ae13340 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass206.java @@ -0,0 +1,4 @@ +// PA2 pass parameter decl +class A { + void p(int [] m){} +} diff --git a/miniJava/tests/pa2_tests/pass206.java.out b/miniJava/tests/pa2_tests/pass206.java.out new file mode 100644 index 0000000..ecb3a58 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass206.java.out @@ -0,0 +1,17 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . ArrayType + . . . INT BaseType + . . . "m"parametername + . . StmtList [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass207.java b/miniJava/tests/pa2_tests/pass207.java new file mode 100644 index 0000000..f9ba194 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass207.java @@ -0,0 +1,6 @@ +// PA2 pass new expr +class A { + void p(){ + A a = new A(); + } +} diff --git a/miniJava/tests/pa2_tests/pass207.java.out b/miniJava/tests/pa2_tests/pass207.java.out new file mode 100644 index 0000000..50659ef --- /dev/null +++ b/miniJava/tests/pa2_tests/pass207.java.out @@ -0,0 +1,21 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . ClassType + . . . "A" classname + . . . "a" varname + . . . NewObjectExpr + . . . ClassType + . . . "A" classname +============================================= diff --git a/miniJava/tests/pa2_tests/pass208.java b/miniJava/tests/pa2_tests/pass208.java new file mode 100644 index 0000000..8e36f93 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass208.java @@ -0,0 +1,6 @@ +// PA2 pass qualified ref invocation +class A { + void p(){ + x.y(3); + } +} diff --git a/miniJava/tests/pa2_tests/pass208.java.out b/miniJava/tests/pa2_tests/pass208.java.out new file mode 100644 index 0000000..41aeafe --- /dev/null +++ b/miniJava/tests/pa2_tests/pass208.java.out @@ -0,0 +1,21 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . CallStmt + . . . QualifiedRef + . . . "y" Identifier + . . . IdRef + . . . "x" Identifier + . . . ExprList [1] + . . . . LiteralExpr + . . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass209.java b/miniJava/tests/pa2_tests/pass209.java new file mode 100644 index 0000000..152150e --- /dev/null +++ b/miniJava/tests/pa2_tests/pass209.java @@ -0,0 +1,6 @@ +//PA2 pass qualified reference assignment +class A { + void p(){ + x.y[3] = 3; + } +} diff --git a/miniJava/tests/pa2_tests/pass209.java.out b/miniJava/tests/pa2_tests/pass209.java.out new file mode 100644 index 0000000..d29f541 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass209.java.out @@ -0,0 +1,23 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . AssignStmt + . . . IndexedRef + . . . LiteralExpr + . . . "3" IntLiteral + . . . QualifiedRef + . . . "y" Identifier + . . . IdRef + . . . "x" Identifier + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass210.java b/miniJava/tests/pa2_tests/pass210.java new file mode 100644 index 0000000..b17aeda --- /dev/null +++ b/miniJava/tests/pa2_tests/pass210.java @@ -0,0 +1,6 @@ +// PA2 pass this RefExpr +class A { + A p(){ + return this; + } +} diff --git a/miniJava/tests/pa2_tests/pass210.java.out b/miniJava/tests/pa2_tests/pass210.java.out new file mode 100644 index 0000000..255b32c --- /dev/null +++ b/miniJava/tests/pa2_tests/pass210.java.out @@ -0,0 +1,16 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . ClassType + . . "A" classname + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [0] + . . RefExpr + . . ThisRef +============================================= diff --git a/miniJava/tests/pa2_tests/pass211.java b/miniJava/tests/pa2_tests/pass211.java new file mode 100644 index 0000000..bc7f703 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass211.java @@ -0,0 +1,6 @@ +// PA1 parse Stmt this ref pass +class LegalStmt { + void main () { + this(3,4); + } +} diff --git a/miniJava/tests/pa2_tests/pass211.java.out b/miniJava/tests/pa2_tests/pass211.java.out new file mode 100644 index 0000000..7937472 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass211.java.out @@ -0,0 +1,20 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "LegalStmt" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "main" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . CallStmt + . . . ThisRef + . . . ExprList [2] + . . . . LiteralExpr + . . . . "3" IntLiteral + . . . . LiteralExpr + . . . . "4" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass212.java b/miniJava/tests/pa2_tests/pass212.java new file mode 100644 index 0000000..9d38574 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass212.java @@ -0,0 +1,6 @@ +// PA2 pass indexedRef +class A { + void p(){ + A x = x.y[3]; + } +} diff --git a/miniJava/tests/pa2_tests/pass212.java.out b/miniJava/tests/pa2_tests/pass212.java.out new file mode 100644 index 0000000..64f4c41 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass212.java.out @@ -0,0 +1,26 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . ClassType + . . . "A" classname + . . . "x" varname + . . . RefExpr + . . . IndexedRef + . . . LiteralExpr + . . . "3" IntLiteral + . . . QualifiedRef + . . . "y" Identifier + . . . IdRef + . . . "x" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass213.java b/miniJava/tests/pa2_tests/pass213.java new file mode 100644 index 0000000..fde7a10 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass213.java @@ -0,0 +1,6 @@ +// PA2 pass thisref +class A { + void p(){ + A x = this; + } +} diff --git a/miniJava/tests/pa2_tests/pass213.java.out b/miniJava/tests/pa2_tests/pass213.java.out new file mode 100644 index 0000000..446e270 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass213.java.out @@ -0,0 +1,20 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . ClassType + . . . "A" classname + . . . "x" varname + . . . RefExpr + . . . ThisRef +============================================= diff --git a/miniJava/tests/pa2_tests/pass214.java b/miniJava/tests/pa2_tests/pass214.java new file mode 100644 index 0000000..3237566 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass214.java @@ -0,0 +1,6 @@ +// PA2 pass qualified reference +class A { + void p(){ + A x = this.p(); + } +} diff --git a/miniJava/tests/pa2_tests/pass214.java.out b/miniJava/tests/pa2_tests/pass214.java.out new file mode 100644 index 0000000..5e045fc --- /dev/null +++ b/miniJava/tests/pa2_tests/pass214.java.out @@ -0,0 +1,23 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . ClassType + . . . "A" classname + . . . "x" varname + . . . CallExpr + . . . QualifiedRef + . . . "p" Identifier + . . . ThisRef + . . . ExprList + [0] +============================================= diff --git a/miniJava/tests/pa2_tests/pass215.java b/miniJava/tests/pa2_tests/pass215.java new file mode 100644 index 0000000..e1df960 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass215.java @@ -0,0 +1,6 @@ +// PA2 pass indexed ref +class A { + void p(){ + A x = this.x[3]; + } +} diff --git a/miniJava/tests/pa2_tests/pass215.java.out b/miniJava/tests/pa2_tests/pass215.java.out new file mode 100644 index 0000000..48a893f --- /dev/null +++ b/miniJava/tests/pa2_tests/pass215.java.out @@ -0,0 +1,25 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . ClassType + . . . "A" classname + . . . "x" varname + . . . RefExpr + . . . IndexedRef + . . . LiteralExpr + . . . "3" IntLiteral + . . . QualifiedRef + . . . "x" Identifier + . . . ThisRef +============================================= diff --git a/miniJava/tests/pa2_tests/pass216.java b/miniJava/tests/pa2_tests/pass216.java new file mode 100644 index 0000000..02abbe7 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass216.java @@ -0,0 +1,6 @@ +// PA2 pass unary expr +class A { + void f(){ + boolean p = p && !!p; + } +} diff --git a/miniJava/tests/pa2_tests/pass216.java.out b/miniJava/tests/pa2_tests/pass216.java.out new file mode 100644 index 0000000..fc73685 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass216.java.out @@ -0,0 +1,29 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "p" varname + . . . BinaryExpr + . . . "&&" Operator + . . . RefExpr + . . . IdRef + . . . "p" Identifier + . . . UnaryExpr + . . . "!" Operator + . . . UnaryExpr + . . . "!" Operator + . . . RefExpr + . . . IdRef + . . . "p" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass217.java b/miniJava/tests/pa2_tests/pass217.java new file mode 100644 index 0000000..942fe46 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass217.java @@ -0,0 +1,6 @@ +// PA2 pass stmt +class A { + void f(int a, int b){ + if (a < b) b = a; + } +} diff --git a/miniJava/tests/pa2_tests/pass217.java.out b/miniJava/tests/pa2_tests/pass217.java.out new file mode 100644 index 0000000..f99a8e6 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass217.java.out @@ -0,0 +1,34 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "f" methodname + . . ParameterDeclList [2] + . . . ParameterDecl + . . . INT BaseType + . . . "a"parametername + . . . ParameterDecl + . . . INT BaseType + . . . "b"parametername + . . StmtList [1] + . . . IfStmt + . . . BinaryExpr + . . . "<" Operator + . . . RefExpr + . . . IdRef + . . . "a" Identifier + . . . RefExpr + . . . IdRef + . . . "b" Identifier + . . . AssignStmt + . . . IdRef + . . . "b" Identifier + . . . RefExpr + . . . IdRef + . . . "a" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass222.java b/miniJava/tests/pa2_tests/pass222.java new file mode 100644 index 0000000..8188a12 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass222.java @@ -0,0 +1,9 @@ +// PA2 pass AST references in arguments and method invocations +class C { + public void foo() { + // "this" as reference and as qualifier + this.foo(3, this); + other.foo(4, other); + } +} + diff --git a/miniJava/tests/pa2_tests/pass222.java.out b/miniJava/tests/pa2_tests/pass222.java.out new file mode 100644 index 0000000..c53247b --- /dev/null +++ b/miniJava/tests/pa2_tests/pass222.java.out @@ -0,0 +1,33 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "C" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "foo" methodname + . . ParameterDeclList [0] + . . StmtList [2] + . . . CallStmt + . . . QualifiedRef + . . . "foo" Identifier + . . . ThisRef + . . . ExprList [2] + . . . . LiteralExpr + . . . . "3" IntLiteral + . . . . RefExpr + . . . . ThisRef + . . . CallStmt + . . . QualifiedRef + . . . "foo" Identifier + . . . IdRef + . . . "other" Identifier + . . . ExprList [2] + . . . . LiteralExpr + . . . . "4" IntLiteral + . . . . RefExpr + . . . . IdRef + . . . . "other" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass223.java b/miniJava/tests/pa2_tests/pass223.java new file mode 100644 index 0000000..2b7470e --- /dev/null +++ b/miniJava/tests/pa2_tests/pass223.java @@ -0,0 +1,21 @@ +// PA2 pass AST multiple classes +class A {} + +class B { + private int [] v; + + public void foo(int a, B other) {} + + C c; + + private int x; +} + +class C { + private boolean b; + + public int[] tryit() { + int x =-/* unary */-x; + return (new int [20]); + } +} diff --git a/miniJava/tests/pa2_tests/pass223.java.out b/miniJava/tests/pa2_tests/pass223.java.out new file mode 100644 index 0000000..e2dbe84 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass223.java.out @@ -0,0 +1,63 @@ +======= AST Display ========================= +Package + ClassDeclList [3] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [0] + . ClassDecl + . "B" classname + . FieldDeclList [3] + . . (private) FieldDecl + . . ArrayType + . . INT BaseType + . . "v" fieldname + . . (public) FieldDecl + . . ClassType + . . "C" classname + . . "c" fieldname + . . (private) FieldDecl + . . INT BaseType + . . "x" fieldname + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "foo" methodname + . . ParameterDeclList [2] + . . . ParameterDecl + . . . INT BaseType + . . . "a"parametername + . . . ParameterDecl + . . . ClassType + . . . "B" classname + . . . "other"parametername + . . StmtList [0] + . ClassDecl + . "C" classname + . FieldDeclList [1] + . . (private) FieldDecl + . . BOOLEAN BaseType + . . "b" fieldname + . MethodDeclList [1] + . . (public) MethodDecl + . . ArrayType + . . INT BaseType + . . "tryit" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . INT BaseType + . . . "x" varname + . . . UnaryExpr + . . . "-" Operator + . . . UnaryExpr + . . . "-" Operator + . . . RefExpr + . . . IdRef + . . . "x" Identifier + . . NewArrayExpr + . . INT BaseType + . . LiteralExpr + . . "20" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass224.java b/miniJava/tests/pa2_tests/pass224.java new file mode 100644 index 0000000..c8df497 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass224.java @@ -0,0 +1,6 @@ +//PA2 pass qualified reference expression +class A { + void p(){ + int a = x[3].y[4](z,5) + 2; + } +} diff --git a/miniJava/tests/pa2_tests/pass224.java.out b/miniJava/tests/pa2_tests/pass224.java.out new file mode 100644 index 0000000..4d5ef27 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass224.java.out @@ -0,0 +1,38 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "p" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . INT BaseType + . . . "a" varname + . . . BinaryExpr + . . . "+" Operator + . . . CallExpr + . . . IndexedRef + . . . LiteralExpr + . . . "4" IntLiteral + . . . QualifiedRef + . . . "y" Identifier + . . . IndexedRef + . . . LiteralExpr + . . . "3" IntLiteral + . . . IdRef + . . . "x" Identifier + . . . ExprList + [2] + . . . . RefExpr + . . . . IdRef + . . . . "z" Identifier + . . . . LiteralExpr + . . . . "5" IntLiteral + . . . LiteralExpr + . . . "2" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass250.java b/miniJava/tests/pa2_tests/pass250.java new file mode 100644 index 0000000..9e01991 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass250.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + x = 1 + 2 * 3; + } +} diff --git a/miniJava/tests/pa2_tests/pass250.java.out b/miniJava/tests/pa2_tests/pass250.java.out new file mode 100644 index 0000000..f85de86 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass250.java.out @@ -0,0 +1,26 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . BinaryExpr + . . . "+" Operator + . . . LiteralExpr + . . . "1" IntLiteral + . . . BinaryExpr + . . . "*" Operator + . . . LiteralExpr + . . . "2" IntLiteral + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass251.java b/miniJava/tests/pa2_tests/pass251.java new file mode 100644 index 0000000..9c8bd7b --- /dev/null +++ b/miniJava/tests/pa2_tests/pass251.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + x = 1 * 2 + 3; + } +} diff --git a/miniJava/tests/pa2_tests/pass251.java.out b/miniJava/tests/pa2_tests/pass251.java.out new file mode 100644 index 0000000..ffb3202 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass251.java.out @@ -0,0 +1,26 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . BinaryExpr + . . . "+" Operator + . . . BinaryExpr + . . . "*" Operator + . . . LiteralExpr + . . . "1" IntLiteral + . . . LiteralExpr + . . . "2" IntLiteral + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass252.java b/miniJava/tests/pa2_tests/pass252.java new file mode 100644 index 0000000..9ed51e8 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass252.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + x = 1 * 2 / 3; + } +} diff --git a/miniJava/tests/pa2_tests/pass252.java.out b/miniJava/tests/pa2_tests/pass252.java.out new file mode 100644 index 0000000..9ddbf0a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass252.java.out @@ -0,0 +1,26 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . BinaryExpr + . . . "/" Operator + . . . BinaryExpr + . . . "*" Operator + . . . LiteralExpr + . . . "1" IntLiteral + . . . LiteralExpr + . . . "2" IntLiteral + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass253.java b/miniJava/tests/pa2_tests/pass253.java new file mode 100644 index 0000000..6a2358d --- /dev/null +++ b/miniJava/tests/pa2_tests/pass253.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + x = 1 / 2 * 3; + } +} diff --git a/miniJava/tests/pa2_tests/pass253.java.out b/miniJava/tests/pa2_tests/pass253.java.out new file mode 100644 index 0000000..de838d6 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass253.java.out @@ -0,0 +1,26 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . BinaryExpr + . . . "*" Operator + . . . BinaryExpr + . . . "/" Operator + . . . LiteralExpr + . . . "1" IntLiteral + . . . LiteralExpr + . . . "2" IntLiteral + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass254.java b/miniJava/tests/pa2_tests/pass254.java new file mode 100644 index 0000000..0d58bff --- /dev/null +++ b/miniJava/tests/pa2_tests/pass254.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + x = 1 + 2 < 3; + } +} diff --git a/miniJava/tests/pa2_tests/pass254.java.out b/miniJava/tests/pa2_tests/pass254.java.out new file mode 100644 index 0000000..6ca6ee6 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass254.java.out @@ -0,0 +1,26 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . BinaryExpr + . . . "<" Operator + . . . BinaryExpr + . . . "+" Operator + . . . LiteralExpr + . . . "1" IntLiteral + . . . LiteralExpr + . . . "2" IntLiteral + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass255.java b/miniJava/tests/pa2_tests/pass255.java new file mode 100644 index 0000000..866788b --- /dev/null +++ b/miniJava/tests/pa2_tests/pass255.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + boolean x = 1 < 2 + 3; + } +} diff --git a/miniJava/tests/pa2_tests/pass255.java.out b/miniJava/tests/pa2_tests/pass255.java.out new file mode 100644 index 0000000..af77f34 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass255.java.out @@ -0,0 +1,27 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "x" varname + . . . BinaryExpr + . . . "<" Operator + . . . LiteralExpr + . . . "1" IntLiteral + . . . BinaryExpr + . . . "+" Operator + . . . LiteralExpr + . . . "2" IntLiteral + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass256.java b/miniJava/tests/pa2_tests/pass256.java new file mode 100644 index 0000000..a7e5f7f --- /dev/null +++ b/miniJava/tests/pa2_tests/pass256.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + boolean x = !true < false; + } +} diff --git a/miniJava/tests/pa2_tests/pass256.java.out b/miniJava/tests/pa2_tests/pass256.java.out new file mode 100644 index 0000000..5d97220 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass256.java.out @@ -0,0 +1,25 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "x" varname + . . . BinaryExpr + . . . "<" Operator + . . . UnaryExpr + . . . "!" Operator + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . LiteralExpr + . . . "false" BooleanLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass257.java b/miniJava/tests/pa2_tests/pass257.java new file mode 100644 index 0000000..3a4ac9b --- /dev/null +++ b/miniJava/tests/pa2_tests/pass257.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + boolean x = true && false || true; + } +} diff --git a/miniJava/tests/pa2_tests/pass257.java.out b/miniJava/tests/pa2_tests/pass257.java.out new file mode 100644 index 0000000..d0bc5a7 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass257.java.out @@ -0,0 +1,27 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "x" varname + . . . BinaryExpr + . . . "||" Operator + . . . BinaryExpr + . . . "&&" Operator + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . LiteralExpr + . . . "false" BooleanLiteral + . . . LiteralExpr + . . . "true" BooleanLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass258.java b/miniJava/tests/pa2_tests/pass258.java new file mode 100644 index 0000000..746fa64 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass258.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + x = (1 + 2) * 3; + } +} diff --git a/miniJava/tests/pa2_tests/pass258.java.out b/miniJava/tests/pa2_tests/pass258.java.out new file mode 100644 index 0000000..d0eafdd --- /dev/null +++ b/miniJava/tests/pa2_tests/pass258.java.out @@ -0,0 +1,26 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . BinaryExpr + . . . "*" Operator + . . . BinaryExpr + . . . "+" Operator + . . . LiteralExpr + . . . "1" IntLiteral + . . . LiteralExpr + . . . "2" IntLiteral + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass259.java b/miniJava/tests/pa2_tests/pass259.java new file mode 100644 index 0000000..56a2583 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass259.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + x = 1 - 2 * -3; + } + } diff --git a/miniJava/tests/pa2_tests/pass259.java.out b/miniJava/tests/pa2_tests/pass259.java.out new file mode 100644 index 0000000..7c3a39d --- /dev/null +++ b/miniJava/tests/pa2_tests/pass259.java.out @@ -0,0 +1,28 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . BinaryExpr + . . . "-" Operator + . . . LiteralExpr + . . . "1" IntLiteral + . . . BinaryExpr + . . . "*" Operator + . . . LiteralExpr + . . . "2" IntLiteral + . . . UnaryExpr + . . . "-" Operator + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass260.java b/miniJava/tests/pa2_tests/pass260.java new file mode 100644 index 0000000..f5e39e7 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass260.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + x = - -1 * 2 -3; + } +} diff --git a/miniJava/tests/pa2_tests/pass260.java.out b/miniJava/tests/pa2_tests/pass260.java.out new file mode 100644 index 0000000..78abffc --- /dev/null +++ b/miniJava/tests/pa2_tests/pass260.java.out @@ -0,0 +1,30 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . BinaryExpr + . . . "-" Operator + . . . BinaryExpr + . . . "*" Operator + . . . UnaryExpr + . . . "-" Operator + . . . UnaryExpr + . . . "-" Operator + . . . LiteralExpr + . . . "1" IntLiteral + . . . LiteralExpr + . . . "2" IntLiteral + . . . LiteralExpr + . . . "3" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass261.java b/miniJava/tests/pa2_tests/pass261.java new file mode 100644 index 0000000..60bff9c --- /dev/null +++ b/miniJava/tests/pa2_tests/pass261.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f() { + boolean x = 2 < 1 && 3 >= 4; + } +} diff --git a/miniJava/tests/pa2_tests/pass261.java.out b/miniJava/tests/pa2_tests/pass261.java.out new file mode 100644 index 0000000..e07c152 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass261.java.out @@ -0,0 +1,31 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "x" varname + . . . BinaryExpr + . . . "&&" Operator + . . . BinaryExpr + . . . "<" Operator + . . . LiteralExpr + . . . "2" IntLiteral + . . . LiteralExpr + . . . "1" IntLiteral + . . . BinaryExpr + . . . ">=" Operator + . . . LiteralExpr + . . . "3" IntLiteral + . . . LiteralExpr + . . . "4" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass262.java b/miniJava/tests/pa2_tests/pass262.java new file mode 100644 index 0000000..b365a08 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass262.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f ( ) { + boolean x = false && 2 >= 3 || true; + } +} diff --git a/miniJava/tests/pa2_tests/pass262.java.out b/miniJava/tests/pa2_tests/pass262.java.out new file mode 100644 index 0000000..99df7e6 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass262.java.out @@ -0,0 +1,31 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "x" varname + . . . BinaryExpr + . . . "||" Operator + . . . BinaryExpr + . . . "&&" Operator + . . . LiteralExpr + . . . "false" BooleanLiteral + . . . BinaryExpr + . . . ">=" Operator + . . . LiteralExpr + . . . "2" IntLiteral + . . . LiteralExpr + . . . "3" IntLiteral + . . . LiteralExpr + . . . "true" BooleanLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass263.java b/miniJava/tests/pa2_tests/pass263.java new file mode 100644 index 0000000..23aa533 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass263.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f ( ) { + int x = 1 + 2 - 3 * 4 / 5 ; + } +} diff --git a/miniJava/tests/pa2_tests/pass263.java.out b/miniJava/tests/pa2_tests/pass263.java.out new file mode 100644 index 0000000..9449796 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass263.java.out @@ -0,0 +1,35 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . INT BaseType + . . . "x" varname + . . . BinaryExpr + . . . "-" Operator + . . . BinaryExpr + . . . "+" Operator + . . . LiteralExpr + . . . "1" IntLiteral + . . . LiteralExpr + . . . "2" IntLiteral + . . . BinaryExpr + . . . "/" Operator + . . . BinaryExpr + . . . "*" Operator + . . . LiteralExpr + . . . "3" IntLiteral + . . . LiteralExpr + . . . "4" IntLiteral + . . . LiteralExpr + . . . "5" IntLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass264.java b/miniJava/tests/pa2_tests/pass264.java new file mode 100644 index 0000000..3348dbe --- /dev/null +++ b/miniJava/tests/pa2_tests/pass264.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f ( ) { + boolean x = true || false && false || true == false; + } +} diff --git a/miniJava/tests/pa2_tests/pass264.java.out b/miniJava/tests/pa2_tests/pass264.java.out new file mode 100644 index 0000000..4679c18 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass264.java.out @@ -0,0 +1,35 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "x" varname + . . . BinaryExpr + . . . "||" Operator + . . . BinaryExpr + . . . "||" Operator + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . BinaryExpr + . . . "&&" Operator + . . . LiteralExpr + . . . "false" BooleanLiteral + . . . LiteralExpr + . . . "false" BooleanLiteral + . . . BinaryExpr + . . . "==" Operator + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . LiteralExpr + . . . "false" BooleanLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass265.java b/miniJava/tests/pa2_tests/pass265.java new file mode 100644 index 0000000..e642a53 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass265.java @@ -0,0 +1,6 @@ +// PA2 pass expr precedence +class A { + int f (){ + int d = 2+-x- -x; + } +} diff --git a/miniJava/tests/pa2_tests/pass265.java.out b/miniJava/tests/pa2_tests/pass265.java.out new file mode 100644 index 0000000..3ca3a9d --- /dev/null +++ b/miniJava/tests/pa2_tests/pass265.java.out @@ -0,0 +1,33 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . INT BaseType + . . "f" methodname + . . ParameterDeclList [0] + . . StmtList [1] + . . . VarDeclStmt + . . . VarDecl + . . . INT BaseType + . . . "d" varname + . . . BinaryExpr + . . . "-" Operator + . . . BinaryExpr + . . . "+" Operator + . . . LiteralExpr + . . . "2" IntLiteral + . . . UnaryExpr + . . . "-" Operator + . . . RefExpr + . . . IdRef + . . . "x" Identifier + . . . UnaryExpr + . . . "-" Operator + . . . RefExpr + . . . IdRef + . . . "x" Identifier +============================================= diff --git a/miniJava/tests/pa2_tests/pass290.java b/miniJava/tests/pa2_tests/pass290.java new file mode 100644 index 0000000..69552a0 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass290.java @@ -0,0 +1,8 @@ +// PA2 pass AST reflects operator precedence +class A { + public static void main(String [] args) { + // these two stmts should have the same expr AST + boolean b = false || true == 2 < -3 - 4 / 5 && !!false; + boolean b = false || ((true == (2 < ((-3) - (4 /5)))) && (!(!false))); + } +} diff --git a/miniJava/tests/pa2_tests/pass290.java.out b/miniJava/tests/pa2_tests/pass290.java.out new file mode 100644 index 0000000..3291d4a --- /dev/null +++ b/miniJava/tests/pa2_tests/pass290.java.out @@ -0,0 +1,90 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "A" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public static) MethodDecl + . . VOID BaseType + . . "main" methodname + . . ParameterDeclList [1] + . . . ParameterDecl + . . . ArrayType + . . . ClassType + . . . "String" classname + . . . "args"parametername + . . StmtList [2] + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "b" varname + . . . BinaryExpr + . . . "||" Operator + . . . LiteralExpr + . . . "false" BooleanLiteral + . . . BinaryExpr + . . . "&&" Operator + . . . BinaryExpr + . . . "==" Operator + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . BinaryExpr + . . . "<" Operator + . . . LiteralExpr + . . . "2" IntLiteral + . . . BinaryExpr + . . . "-" Operator + . . . UnaryExpr + . . . "-" Operator + . . . LiteralExpr + . . . "3" IntLiteral + . . . BinaryExpr + . . . "/" Operator + . . . LiteralExpr + . . . "4" IntLiteral + . . . LiteralExpr + . . . "5" IntLiteral + . . . UnaryExpr + . . . "!" Operator + . . . UnaryExpr + . . . "!" Operator + . . . LiteralExpr + . . . "false" BooleanLiteral + . . . VarDeclStmt + . . . VarDecl + . . . BOOLEAN BaseType + . . . "b" varname + . . . BinaryExpr + . . . "||" Operator + . . . LiteralExpr + . . . "false" BooleanLiteral + . . . BinaryExpr + . . . "&&" Operator + . . . BinaryExpr + . . . "==" Operator + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . BinaryExpr + . . . "<" Operator + . . . LiteralExpr + . . . "2" IntLiteral + . . . BinaryExpr + . . . "-" Operator + . . . UnaryExpr + . . . "-" Operator + . . . LiteralExpr + . . . "3" IntLiteral + . . . BinaryExpr + . . . "/" Operator + . . . LiteralExpr + . . . "4" IntLiteral + . . . LiteralExpr + . . . "5" IntLiteral + . . . UnaryExpr + . . . "!" Operator + . . . UnaryExpr + . . . "!" Operator + . . . LiteralExpr + . . . "false" BooleanLiteral +============================================= diff --git a/miniJava/tests/pa2_tests/pass291.java b/miniJava/tests/pa2_tests/pass291.java new file mode 100644 index 0000000..711d673 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass291.java @@ -0,0 +1,34 @@ +// PA2 pass AST reflects associativity of nested if stmts +class B { + public void foo() { + // nested if stmts should associate in order suggested + // by indentation + + if (b) + if (c) + x = 1; + else + x = 2; + else + if (d) + x = 11; + else + x = 22; + + + if (true) + if (false) + x = 3; + else + x = 4; + + + if (!true) + x = 33; + else + if (!false) + x = 44; + else + x = 55; + } +} diff --git a/miniJava/tests/pa2_tests/pass291.java.out b/miniJava/tests/pa2_tests/pass291.java.out new file mode 100644 index 0000000..829f868 --- /dev/null +++ b/miniJava/tests/pa2_tests/pass291.java.out @@ -0,0 +1,86 @@ +======= AST Display ========================= +Package + ClassDeclList [1] + . ClassDecl + . "B" classname + . FieldDeclList [0] + . MethodDeclList [1] + . . (public) MethodDecl + . . VOID BaseType + . . "foo" methodname + . . ParameterDeclList [0] + . . StmtList [3] + . . . IfStmt + . . . RefExpr + . . . IdRef + . . . "b" Identifier + . . . IfStmt + . . . RefExpr + . . . IdRef + . . . "c" Identifier + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . LiteralExpr + . . . "1" IntLiteral + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . LiteralExpr + . . . "2" IntLiteral + . . . IfStmt + . . . RefExpr + . . . IdRef + . . . "d" Identifier + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . LiteralExpr + . . . "11" IntLiteral + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . LiteralExpr + . . . "22" IntLiteral + . . . IfStmt + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . IfStmt + . . . LiteralExpr + . . . "false" BooleanLiteral + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . LiteralExpr + . . . "3" IntLiteral + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . LiteralExpr + . . . "4" IntLiteral + . . . IfStmt + . . . UnaryExpr + . . . "!" Operator + . . . LiteralExpr + . . . "true" BooleanLiteral + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . LiteralExpr + . . . "33" IntLiteral + . . . IfStmt + . . . UnaryExpr + . . . "!" Operator + . . . LiteralExpr + . . . "false" BooleanLiteral + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . LiteralExpr + . . . "44" IntLiteral + . . . AssignStmt + . . . IdRef + . . . "x" Identifier + . . . LiteralExpr + . . . "55" IntLiteral +=============================================