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_INTEGER_LITERAL, 1))) ])) ])
def testParsingDecrements(self): self.assertEqual(ParseToAst('阿庆混腔势。'), [ Statement(STMT_DEC_BY, (IdentifierToken('阿庆'), IntegerLiteralExpr(1))) ]) self.assertEqual(ParseToAst('阿庆混三趟。'), [ Statement(STMT_DEC_BY, (IdentifierToken('阿庆'), IntegerLiteralExpr(3))) ])
def testParsingIncrements(self): self.assertEqual(ParseToAst('阿庆扎台型。'), [ Statement(STMT_INC_BY, (IdentifierToken('阿庆'), IntegerLiteralExpr(1))) ]) self.assertEqual(ParseToAst('阿庆扎两趟。'), [ Statement(STMT_INC_BY, (IdentifierToken('阿庆'), IntegerLiteralExpr(2))) ])
def testTokenizingDecrements(self): self.assertEqual(list(Tokenize('阿庆混腔势')), [ IdentifierToken('阿庆'), Keyword('混腔势'), ]) self.assertEqual(list(Tokenize('阿庆混三趟')), [ IdentifierToken('阿庆'), Keyword('混'), Token(TK_INTEGER_LITERAL, 3), Keyword('趟'), ])
def testTokenizingIncrements(self): self.assertEqual(list(Tokenize('阿庆扎台型')), [ IdentifierToken('阿庆'), Keyword('扎台型'), ]) self.assertEqual(list(Tokenize('阿庆扎两趟')), [ IdentifierToken('阿庆'), Keyword('扎'), Token(TK_INTEGER_LITERAL, 2), Keyword('趟'), ])
def testParsingFuncDefWithParam(self): self.assertEqual( ParseToAst('【阶乘】(那啥)哪能组:组好了。'), [ Statement( STMT_FUNC_DEF, ( IdentifierToken('阶乘'), [IdentifierToken('那啥')], # Formal parameters. [] # Function body. )) ])
def testTokenizingFuncDef(self): self.assertEqual(list(Tokenize('写九九表哪能组:组好了。')), [ IdentifierToken('写九九表'), Keyword('哪能组:'), Keyword('组好了'), Keyword('。'), ])
def testTokenizeCompound(self): self.assertEqual(list(Tokenize('一道组特:\n 嘎讪胡:阿庆。\n组好了。')), [ Keyword('一道组特:'), Keyword('嘎讪胡'), Keyword(':'), IdentifierToken('阿庆'), Keyword('。'), Keyword('组好了'), Keyword('。'), ])
def testTokenizeLoop(self): self.assertEqual(list(Tokenize('阿庆从1到9搞七捻三:搞好了。')), [ IdentifierToken('阿庆'), Keyword('从'), Token(TK_INTEGER_LITERAL, 1), Keyword('到'), Token(TK_INTEGER_LITERAL, 9), Keyword('搞七捻三:'), Keyword('搞好了'), Keyword('。'), ])
def testParsingLoop(self): self.assertEqual(ParseToAst('阿庆从1到9搞七捻三:搞好了。'), [ Statement(STMT_LOOP, (IdentifierToken('阿庆'), IntegerLiteralExpr(1), IntegerLiteralExpr(9), [])) ])
def testTokenizingFuncCall(self): self.assertEqual(list(Tokenize('白相写九九表')), [ Keyword('白相'), IdentifierToken('写九九表'), ])
def testTokenizingConcat(self): self.assertEqual(list(Tokenize('阿德、二')), [ IdentifierToken('阿德'), Keyword('、'), Token(TK_INTEGER_LITERAL, 2), ])
def testTokenize(self): self.assertEqual(list(BasicTokenize('【阶乘】')), [ IdentifierToken('阶乘'), ]) self.assertEqual(list(BasicTokenize('【 阶 乘 】')), [ IdentifierToken('阶乘'), ]) self.assertEqual(list(BasicTokenize('【阶乘】(那啥)')), [ IdentifierToken('阶乘'), Keyword('('), Token(TK_CHAR, '那'), Token(TK_CHAR, '啥'), Keyword(')'), ]) self.assertEqual(list(BasicTokenize('“ ”')), [ Keyword('“'), Token(TK_STRING_LITERAL, ' '), Keyword('”'), ]) self.assertEqual(list(BasicTokenize('“”')), [ Keyword('“'), Token(TK_STRING_LITERAL, ''), Keyword('”'), ]) self.assertEqual(list(BasicTokenize('“ A B ”')), [ Keyword('“'), Token(TK_STRING_LITERAL, ' A B '), Keyword('”'), ]) self.assertEqual(list(BasicTokenize('阿德')), [ Token(TK_CHAR, '阿'), Token(TK_CHAR, '德'), ]) self.assertEqual(list(BasicTokenize(' 阿 德 ')), [ Token(TK_CHAR, '阿'), Token(TK_CHAR, '德'), ]) self.assertEqual(list(Tokenize('# 123456\n阿德')), [IdentifierToken('阿德')]) self.assertEqual(list(Tokenize('阿德')), [IdentifierToken('阿德')]) self.assertEqual(ParseInteger('阿德'), (None, '阿德')) self.assertEqual(list(ParseChars('阿德')), [IdentifierToken('阿德')]) self.assertEqual( list(Tokenize('阿德是则赤佬')), [IdentifierToken('阿德'), Keyword('是则赤佬')]) self.assertEqual(list(Tokenize('阿德是 则\n赤佬 。 ')), [ IdentifierToken('阿德'), Keyword('是则赤佬'), Keyword('。'), ]) self.assertEqual(list(Tokenize('阿德是则赤佬。\n阿庆是则赤佬。\n')), [ IdentifierToken('阿德'), Keyword('是则赤佬'), Keyword('。'), IdentifierToken('阿庆'), Keyword('是则赤佬'), Keyword('。'), ]) self.assertEqual(list(Tokenize('阿德毛估估是250。\n阿庆毛估估是阿德。\n')), [ IdentifierToken('阿德'), Keyword('毛估估是'), Token(TK_INTEGER_LITERAL, 250), Keyword('。'), IdentifierToken('阿庆'), Keyword('毛估估是'), IdentifierToken('阿德'), Keyword('。') ]) self.assertEqual(list(Tokenize('嘎讪胡:“你好”。')), [ Keyword('嘎讪胡'), Keyword(':'), Keyword('“'), Token(TK_STRING_LITERAL, '你好'), Keyword('”'), Keyword('。') ])