def testParsingIncrements(self): self.assertEqual(ParseToAst('老王走走。'), [ Statement(STMT_INC_BY, (VariableExpr('老王'), IntegerLiteralExpr(1))) ]) self.assertEqual(ParseToAst('老王走两步。'), [ Statement(STMT_INC_BY, (VariableExpr('老王'), IntegerLiteralExpr(2))) ])
def testParsingDecrements(self): self.assertEqual(ParseToAst('老王稍稍。'), [ Statement(STMT_DEC_BY, (VariableExpr('老王'), IntegerLiteralExpr(1))) ]) self.assertEqual(ParseToAst('老王稍三步。'), [ Statement(STMT_DEC_BY, (VariableExpr('老王'), IntegerLiteralExpr(3))) ])
def testParsingFuncDef(self): self.assertEqual( ParseToAst('写九九表咋整:整完了。'), [ Statement( STMT_FUNC_DEF, ( Token(TK_IDENTIFIER, '写九九表'), [], # Formal parameters. [] # Function body. )) ]) self.assertEqual( ParseToAst('写九九表咋整:唠唠:1。整完了。'), [ Statement( STMT_FUNC_DEF, ( Token(TK_IDENTIFIER, '写九九表'), [], # Formal parameters. # Function body. [ Statement( STMT_SAY, LiteralExpr(Token(TK_INTEGER_LITERAL, 1))) ])) ])
def testParsingFuncDef(self): self.assertEqual( ParseToAst('写九九表咋整:整完了。'), [ Statement( STMT_FUNC_DEF, ( IdentifierToken('写九九表'), [], # Formal parameters. [] # Function body. )) ]) self.assertEqual( ParseToAst('写九九表咋整:唠唠:1。整完了。'), [ Statement( STMT_FUNC_DEF, ( IdentifierToken('写九九表'), [], # Formal parameters. # Function body. [ Statement( STMT_SAY, LiteralExpr(Token(TK_NUMBER_LITERAL, 1, None))) ])) ])
def testParsingDecrements(self): self.assertEqual(ParseToAst(u'老王退退。'), [ Statement(STMT_DEC_BY, (Token(TK_IDENTIFIER, u'老王'), LiteralExpr(Token(TK_INTEGER_LITERAL, 1)))) ]) self.assertEqual(ParseToAst(u'老王退三步。'), [ Statement(STMT_DEC_BY, (Token(TK_IDENTIFIER, u'老王'), LiteralExpr(Token(TK_INTEGER_LITERAL, 3)))) ])
def testParsingIncrements(self): self.assertEqual(ParseToAst(u'老王走走。'), [ Statement(STMT_INC_BY, (Token(TK_IDENTIFIER, u'老王'), LiteralExpr(Token(TK_INTEGER_LITERAL, 1)))) ]) self.assertEqual(ParseToAst(u'老王走两步。'), [ Statement(STMT_INC_BY, (Token(TK_IDENTIFIER, u'老王'), LiteralExpr(Token(TK_INTEGER_LITERAL, 2)))) ])
def testParsingLoop(self): self.assertEqual(ParseToAst('老王从1到9磨叽:磨叽完了。'), [ Statement(STMT_LOOP, (Token(TK_IDENTIFIER, '老王'), LiteralExpr(Token(TK_INTEGER_LITERAL, 1)), LiteralExpr(Token(TK_INTEGER_LITERAL, 9)), [])) ])
def DisabledTestParsingComparison(self): self.assertEquals( ParseToAst(u'唠唠:2比5大。'), [Statement( STMT_SAY, ComparisonExpr(2, 'GT', 5) )])
def testParsingComparison(self): self.assertEquals(ParseToAst('唠唠:2比5大。'), [ Statement( STMT_SAY, ComparisonExpr(IntegerLiteralExpr(2), Keyword('大'), IntegerLiteralExpr(5))) ])
def testParsingFuncCallWithParam(self): self.assertEqual(ParseToAst('整【阶乘】(五)。'), [ Statement( STMT_CALL, CallExpr(Token(TK_IDENTIFIER, '阶乘'), [LiteralExpr(Token(TK_INTEGER_LITERAL, 5))])) ])
def testParsingFuncDefWithParam(self): self.assertEqual( ParseToAst(u'【阶乘】(几)咋整:整完了。'), [Statement(STMT_FUNC_DEF, (Token(TK_IDENTIFIER, u'阶乘'), [Token(TK_IDENTIFIER, u'几')], # Formal parameters. [] # Function body. ))])
def testParsingFuncDefWithParam(self): self.assertEqual( ParseToAst('【阶乘】(那啥)咋整:整完了。'), [Statement(STMT_FUNC_DEF, (IdentifierToken('阶乘'), [IdentifierToken('那啥')], # Formal parameters. [] # Function body. ))])
def testParsingComparison(self): self.assertEquals(ParseToAst('唠唠:2比5大。'), [ Statement( STMT_SAY, ComparisonExpr(LiteralExpr(Token(TK_INTEGER_LITERAL, 2)), Keyword('大'), LiteralExpr(Token(TK_INTEGER_LITERAL, 5)))) ])
def testParsingLoop(self): self.assertEqual( ParseToAst('老王从1到9磨叽:磨叽完了。'), [Statement( STMT_LOOP, (IdentifierToken('老王'), IntegerLiteralExpr(1), IntegerLiteralExpr(9), []))])
def testParsingLoop(self): self.assertEqual( ParseToAst('老王从1到9磨叽:磨叽完了。'), [Statement( STMT_LOOP, (VariableExpr('老王'), NumberLiteralExpr(1), NumberLiteralExpr(9), NumberLiteralExpr(1), []))]) self.assertEqual( ParseToAst('老王从二到十一步七蹿磨叽:磨叽完了。'), [Statement( STMT_LOOP, (VariableExpr('老王'), NumberLiteralExpr(2), NumberLiteralExpr(10), NumberLiteralExpr(7), []))]) self.assertEqual( ParseToAst('老王从二到十一步七减一蹿磨叽:磨叽完了。'), [Statement( STMT_LOOP, (VariableExpr('老王'), NumberLiteralExpr(2), NumberLiteralExpr(10), ArithmeticExpr( NumberLiteralExpr(7), Keyword('减'), NumberLiteralExpr(1)), []))]) self.assertEqual( ParseToAst('老王从一而终磨叽:磨叽完了。'), [Statement( STMT_INFINITE_LOOP, (VariableExpr('老王'), []))]) self.assertEqual( ParseToAst('老张在苹果总部磨叽:磨叽完了。'), [Statement( STMT_INFINITE_LOOP, (VariableExpr('老张'), []))])
def testParsingLoop(self): self.assertEqual(ParseToAst('老王从1到9磨叽:磨叽完了。'), [ Statement(STMT_LOOP, (VariableExpr('老王'), NumberLiteralExpr(1), NumberLiteralExpr(9), [])) ])
def testParsingFuncCallWithParam(self): self.assertEqual( ParseToAst('整【阶乘】(五)。'), [Statement(STMT_CALL, CallExpr('阶乘', [IntegerLiteralExpr(5)]))])