def testParseCallExpr(self): self.assertEqual(ParseExprFromStr('白相阿庆')[0], CallExpr('阿庆', [])) self.assertEqual( ParseExprFromStr('白相阿庆(5)')[0], CallExpr('阿庆', [IntegerLiteralExpr(5)])) self.assertEqual( ParseExprFromStr('白相阿庆(6)')[0], CallExpr('阿庆', [IntegerLiteralExpr(6)])) self.assertEqual( ParseExprFromStr('白相阿庆(阿德,6)')[0], CallExpr( '阿庆', [VariableExpr('阿德'), IntegerLiteralExpr(6)])) self.assertEqual( ParseExprFromStr('白相阿庆(“你”,阿德,6)')[0], CallExpr('阿庆', [ StringLiteralExpr('你'), VariableExpr('阿德'), IntegerLiteralExpr(6) ])) self.assertEqual( ParseExprFromStr('白相阿庆(“你”,阿德,6)')[0], CallExpr('阿庆', [ StringLiteralExpr('你'), VariableExpr('阿德'), IntegerLiteralExpr(6) ]))
def testParsingComparison(self): self.assertEquals(ParseToAst('嘎讪胡:2比5老卵。'), [ Statement( STMT_SAY, ComparisonExpr(IntegerLiteralExpr(2), Keyword('老卵'), IntegerLiteralExpr(5))) ])
def testParsingIncrements(self): self.assertEqual(ParseToAst('阿庆扎台型。'), [ Statement(STMT_INC_BY, (IdentifierToken('阿庆'), IntegerLiteralExpr(1))) ]) self.assertEqual(ParseToAst('阿庆扎两趟。'), [ Statement(STMT_INC_BY, (IdentifierToken('阿庆'), IntegerLiteralExpr(2))) ])
def testParsingDecrements(self): self.assertEqual(ParseToAst('阿庆混腔势。'), [ Statement(STMT_DEC_BY, (IdentifierToken('阿庆'), IntegerLiteralExpr(1))) ]) self.assertEqual(ParseToAst('阿庆混三趟。'), [ Statement(STMT_DEC_BY, (IdentifierToken('阿庆'), IntegerLiteralExpr(3))) ])
def testParseTermExpr(self): self.assertEqual( ParseExprFromStr('阿庆乘五')[0], ArithmeticExpr(VariableExpr('阿庆'), Keyword('乘'), IntegerLiteralExpr(5))) self.assertEqual( ParseExprFromStr('五除以阿庆')[0], ArithmeticExpr(IntegerLiteralExpr(5), Keyword('除以'), VariableExpr('阿庆'))) self.assertEqual( ParseExprFromStr('五除以阿庆乘阿德')[0], ArithmeticExpr( ArithmeticExpr(IntegerLiteralExpr(5), Keyword('除以'), VariableExpr('阿庆')), Keyword('乘'), VariableExpr('阿德')))
def testParseConcatExpr(self): self.assertEqual( ParseExprFromStr('阿庆加油、2、“哈”')[0], ConcatExpr([ ArithmeticExpr(VariableExpr('阿庆'), Keyword('加'), VariableExpr('油')), IntegerLiteralExpr(2), StringLiteralExpr('哈') ]))
def testParseConditional(self): self.assertEqual( ParseStmtFromStr('轧苗头:阿庆比五老卵?要来赛就嘎讪胡:阿庆。')[0], Statement( STMT_CONDITIONAL, ( ComparisonExpr(VariableExpr('阿庆'), Keyword('老卵'), IntegerLiteralExpr(5)), # then-branch Statement(STMT_SAY, VariableExpr('阿庆')), # else-branch None)))
def testParseArithmeticExpr(self): self.assertEqual( ParseExprFromStr('5加六')[0], ArithmeticExpr(IntegerLiteralExpr(5), Keyword('加'), IntegerLiteralExpr(6))) self.assertEqual( ParseExprFromStr('5加六乘3')[0], ArithmeticExpr( IntegerLiteralExpr(5), Keyword('加'), ArithmeticExpr(IntegerLiteralExpr(6), Keyword('乘'), IntegerLiteralExpr(3)))) self.assertEqual( ParseExprFromStr('5减六减阿庆')[0], ArithmeticExpr( ArithmeticExpr(IntegerLiteralExpr(5), Keyword('减'), IntegerLiteralExpr(6)), Keyword('减'), VariableExpr('阿庆')))
def testParseComparisonExpr(self): self.assertEqual( ParseExprFromStr('5比6老卵')[0], ComparisonExpr(IntegerLiteralExpr(5), Keyword('老卵'), IntegerLiteralExpr(6))) self.assertEqual( ParseExprFromStr('阿庆加5比6推板')[0], ComparisonExpr( ArithmeticExpr(VariableExpr('阿庆'), Keyword('加'), IntegerLiteralExpr(5)), Keyword('推板'), IntegerLiteralExpr(6))) self.assertEqual( ParseExprFromStr('阿庆帮阿德一色一样')[0], ComparisonExpr(VariableExpr('阿庆'), Keyword('一色一样'), VariableExpr('阿德'))) self.assertEqual( ParseExprFromStr('阿庆加5帮6伐大一样')[0], ComparisonExpr( ArithmeticExpr(VariableExpr('阿庆'), Keyword('加'), IntegerLiteralExpr(5)), Keyword('伐大一样'), IntegerLiteralExpr(6)))
def testParseInteger(self): self.assertEqual(ParseExprFromStr('5')[0], IntegerLiteralExpr(5)) self.assertEqual(ParseExprFromStr('九')[0], IntegerLiteralExpr(9))
def testParsingFuncCallWithParam(self): self.assertEqual( ParseToAst('白相【阶乘】(五)。'), [Statement(STMT_CALL, CallExpr('阶乘', [IntegerLiteralExpr(5)]))])
def testParsingLoop(self): self.assertEqual(ParseToAst('阿庆从1到9搞七捻三:搞好了。'), [ Statement(STMT_LOOP, (IdentifierToken('阿庆'), IntegerLiteralExpr(1), IntegerLiteralExpr(9), [])) ])
def testParseConcatExpr(self): self.assertEqual( ParseExprFromStr('阿庆、2')[0], ConcatExpr([VariableExpr('阿庆'), IntegerLiteralExpr(2)]))