Beispiel #1
0
 def test_parse_print_statement_method(self):
     tokens = lex("print 10;")
     parser = Parser(tokens)
     parser.advance()
     ast = parser.parse_print_statement()
     expected_ast = PrintStatement(Integer(10))
     self.assertEqual(ast, expected_ast)
Beispiel #2
0
 def test_parse_print_statement_method(self):
     tokens = lex("print 10;")
     parser = Parser(tokens)
     parser.advance()
     ast = parser.parse_print_statement()
     expected_ast = PrintStatement(Integer(10))
     self.assertEqual(ast, expected_ast)
Beispiel #3
0
 def parse_if_statement_method_with_else_statement(self):
     tokens = lex("if x > 22 then\nprint x;\nelse\nprint 0;\ndone\n")
     parser = Parser(tokens)
     parser.advance()
     ast = parser.parse_if_statement()
     expected_ast = IfStatement(RelOpexpr(">", Varexpr("x"), Integer(22)),
                                AST([PrintStatement(Varexpr("x"))]),
                                AST([PrintStatement(Integer(0))]))
     self.assertEqual(ast, expected_ast)
Beispiel #4
0
 def test_parse_if_statement_method(self):
     tokens = lex("if x > 22 then\nprint x;\ndone\n")
     parser = Parser(tokens)
     parser.advance()
     ast = parser.parse_if_statement()
     expected_ast = IfStatement(
         RelOpexpr(">", Varexpr("x"), Integer(22)),
         AST([PrintStatement(Varexpr("x"))]),
         false_stmt=None
     )
     self.assertEqual(ast, expected_ast)
Beispiel #5
0
 def test_parse_while_statement_method(self):
     tokens = lex("while x > 22 do\nprint x;\nx := x - 1;\ndone\n")
     parser = Parser(tokens)
     parser.advance()
     ast = parser.parse_while_statement()
     expected_ast = WhileStatement(
         RelOpexpr(">", Varexpr("x"), Integer(22)),
         AST([PrintStatement(Varexpr("x")),
              AssignStatement("x", BinOpexpr("-", Varexpr("x"), Integer(1)))
              ]),
     )
     self.assertEqual(ast, expected_ast)
Beispiel #6
0
 def test_parse_while_statement_method(self):
     tokens = lex("while x > 22 do\nprint x;\nx := x - 1;\ndone\n")
     parser = Parser(tokens)
     parser.advance()
     ast = parser.parse_while_statement()
     expected_ast = WhileStatement(
         RelOpexpr(">", Varexpr("x"), Integer(22)),
         AST([
             PrintStatement(Varexpr("x")),
             AssignStatement("x", BinOpexpr("-", Varexpr("x"), Integer(1)))
         ]),
     )
     self.assertEqual(ast, expected_ast)
Beispiel #7
0
 def test_token_ahead_method(self):
     tokens = lex("x := 1")
     parser = Parser(tokens)
     parser.advance()
     self.assertEqual(parser.token_ahead().value, 1)
Beispiel #8
0
 def test_advance_method(self):
     tokens = lex("x := 1")
     parser = Parser(tokens)
     parser.advance()
     self.assertEqual(parser.pos, 1)
Beispiel #9
0
 def test_optional_method(self):
     tokens = lex("if x > 10 then\nx:=1\nelse x:=10")
     parser = Parser(tokens)
     self.assertIsNone(parser.optional("else"))
     parser.advance(by=8)
     self.assertTrue(parser.optional("else"))
Beispiel #10
0
 def test_found_one_of_method(self):
     tokens = lex("x := 1 + 1;")
     parser = Parser(tokens)
     self.assertTrue(parser.found_one_of(["ID", "RESERVED"], by="type"))
     parser.advance(by=2)
     self.assertTrue(parser.found_one_of(["NUMBER", "OPERATOR"], by="type"))
Beispiel #11
0
 def test_found_method(self):
     tokens = lex("x := 1 + 1;")
     parser = Parser(tokens)
     self.assertTrue(parser.found("ID", by="type"))
     parser.advance(by=2)
     self.assertTrue(parser.found(1, by="value"))
Beispiel #12
0
 def test_token_ahead_method(self):
     tokens = lex("x := 1")
     parser = Parser(tokens)
     parser.advance()
     self.assertEqual(parser.token_ahead().value, 1)
Beispiel #13
0
 def test_advance_method(self):
     tokens = lex("x := 1")
     parser = Parser(tokens)
     parser.advance()
     self.assertEqual(parser.pos, 1)
Beispiel #14
0
 def test_optional_method(self):
     tokens = lex("if x > 10 then\nx:=1\nelse x:=10")
     parser = Parser(tokens)
     self.assertIsNone(parser.optional("else"))
     parser.advance(by=8)
     self.assertTrue(parser.optional("else"))
Beispiel #15
0
 def test_found_one_of_method(self):
     tokens = lex("x := 1 + 1;")
     parser = Parser(tokens)
     self.assertTrue(parser.found_one_of(["ID", "RESERVED"], by="type"))
     parser.advance(by=2)
     self.assertTrue(parser.found_one_of(["NUMBER", "OPERATOR"], by="type"))
Beispiel #16
0
 def test_found_method(self):
     tokens = lex("x := 1 + 1;")
     parser = Parser(tokens)
     self.assertTrue(parser.found("ID", by="type"))
     parser.advance(by=2)
     self.assertTrue(parser.found(1, by="value"))