@Test
 public void testStrings() throws ParseError {
   assertEquals(parser.parseExpr("\"'a'\"").getClass(), StringPrimitive.class);
   assertEquals(parser.parseExpr("\"TRUE\"").getClass(), StringPrimitive.class);
   assertEquals(parser.parseExpr("\"1+4\"").getClass(), StringPrimitive.class);
   assertEquals(
       parser.parseExpr("\"Did you sell a house in 2010?\"").getClass(), StringPrimitive.class);
 }
 @Test
 public void testIds() throws ParseError {
   assertEquals(parser.parseExpr("a").getClass(), Identifier.class);
   assertEquals(parser.parseExpr("abc").getClass(), Identifier.class);
   assertEquals(parser.parseExpr("ABC").getClass(), Identifier.class);
   assertEquals(parser.parseExpr("ABCDEF").getClass(), Identifier.class);
   assertEquals(parser.parseExpr("abc2323").getClass(), Identifier.class);
   assertEquals(parser.parseExpr("a2bc232").getClass(), Identifier.class);
   assertEquals(parser.parseExpr("a2bc232aa").getClass(), Identifier.class);
 }
 @Test
 public void testRels() throws ParseError {
   assertEquals(parser.parseExpr("a < b").getClass(), LT.class);
   assertEquals(parser.parseExpr("a < b + c").getClass(), LT.class);
   assertEquals(parser.parseExpr("a < (b * c)").getClass(), LT.class);
   assertEquals(parser.parseExpr("(a * b) < c").getClass(), LT.class);
   assertEquals(parser.parseExpr("(a <= b)").getClass(), LEq.class);
   assertEquals(parser.parseExpr("a + b > c").getClass(), GT.class);
   assertEquals(parser.parseExpr("a > b + c").getClass(), GT.class);
 }
  @Test
  public void testSimpleQlForm2() throws ParseError, IOException {
    final String qlText = readResource("simpleQlForm2.ql");
    Form form = parser.parseForm(qlText);
    assertNotNull(form);

    assertAST(
        form,
        Form.class,
        CompoundStatement.class,
        Question.class,
        IfStatement.class,
        Identifier.class,
        CompoundStatement.class,
        Question.class,
        Question.class,
        IfStatement.class,
        GT.class,
        Sub.class,
        Identifier.class,
        Identifier.class,
        IntLiteral.class,
        CompoundStatement.class,
        Question.class);
  }
 @Test
 public void testAdds() throws ParseError {
   assertEquals(parser.parseExpr("3 + 2").getClass(), Add.class);
   assertEquals(parser.parseExpr("(3 + 2)").getClass(), Add.class);
   assertEquals(parser.parseExpr("a + b").getClass(), Add.class);
   assertEquals(parser.parseExpr("(a + b)").getClass(), Add.class);
   assertEquals(parser.parseExpr("a + b + c").getClass(), Add.class);
   assertEquals(parser.parseExpr("(a + b + c)").getClass(), Add.class);
   assertEquals(parser.parseExpr("a + (b + c)").getClass(), Add.class);
   assertEquals(parser.parseExpr("(a + b) + c").getClass(), Add.class);
   assertEquals(parser.parseExpr("(a + b)").getClass(), Add.class);
   assertEquals(parser.parseExpr("a + b * c").getClass(), Add.class);
   assertEquals(parser.parseExpr("a * b + c").getClass(), Add.class);
 }
 @Test
 public void testBools() throws ParseError {
   assertEquals(parser.parseExpr("!b").getClass(), Not.class);
   assertEquals(parser.parseExpr("a && b").getClass(), And.class);
   assertEquals(parser.parseExpr("a > b && b > c").getClass(), And.class);
   assertEquals(parser.parseExpr("(a > b) && (b > c)").getClass(), And.class);
   assertEquals(parser.parseExpr("a||b").getClass(), Or.class);
   assertEquals(parser.parseExpr("TRUE||FALSE").getClass(), Or.class);
   assertEquals(parser.parseExpr("TRUE").getClass(), BooleanPrimitive.class);
 }
 @Test
 public void testNums() throws ParseError {
   assertEquals(parser.parseExpr("0").getClass(), IntegerPrimitive.class);
   assertEquals(parser.parseExpr("(0)").getClass(), IntegerPrimitive.class);
   assertEquals(parser.parseExpr("-1").getClass(), Neg.class);
   assertEquals(parser.parseExpr("+1").getClass(), Pos.class);
   assertEquals(parser.parseExpr("(-1)").getClass(), Neg.class);
   assertEquals(parser.parseExpr("(+1)").getClass(), Pos.class);
   assertEquals(parser.parseExpr("1223").getClass(), IntegerPrimitive.class);
   assertEquals(parser.parseExpr("234234234").getClass(), IntegerPrimitive.class);
 }
 @Test
 public void testMuls() throws ParseError {
   assertEquals(parser.parseExpr("5 * b").getClass(), Mul.class);
   assertEquals(parser.parseExpr("a * b").getClass(), Mul.class);
   assertEquals(parser.parseExpr("a * b * c").getClass(), Mul.class);
   assertEquals(parser.parseExpr("(a * b * c)").getClass(), Mul.class);
   assertEquals(parser.parseExpr("a * (b * c)").getClass(), Mul.class);
   assertEquals(parser.parseExpr("(a * b) * c").getClass(), Mul.class);
   assertEquals(parser.parseExpr("(a * b)").getClass(), Mul.class);
   assertEquals(parser.parseExpr("(a + b) * c").getClass(), Mul.class);
   assertEquals(parser.parseExpr("a * (b + c)").getClass(), Mul.class);
 }