Ejemplo n.º 1
0
 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)
         ]))
Ejemplo n.º 2
0
 def testParsingDecrements(self):
     self.assertEqual(ParseToAst('老王稍稍。'), [
         Statement(STMT_DEC_BY, (VariableExpr('老王'), IntegerLiteralExpr(1)))
     ])
     self.assertEqual(ParseToAst('老王稍三步。'), [
         Statement(STMT_DEC_BY, (VariableExpr('老王'), IntegerLiteralExpr(3)))
     ])
Ejemplo n.º 3
0
 def testParsingComparison(self):
     self.assertEquals(ParseToAst('唠唠:2比5大。'), [
         Statement(
             STMT_SAY,
             ComparisonExpr(IntegerLiteralExpr(2), Keyword('大'),
                            IntegerLiteralExpr(5)))
     ])
Ejemplo n.º 4
0
 def testParsingIncrements(self):
     self.assertEqual(ParseToAst('老王走走。'), [
         Statement(STMT_INC_BY, (VariableExpr('老王'), IntegerLiteralExpr(1)))
     ])
     self.assertEqual(ParseToAst('老王走两步。'), [
         Statement(STMT_INC_BY, (VariableExpr('老王'), IntegerLiteralExpr(2)))
     ])
Ejemplo n.º 5
0
 def testParsingLoop(self):
   self.assertEqual(
       ParseToAst('老王从1到9磨叽:磨叽完了。'),
       [Statement(
           STMT_LOOP,
           (IdentifierToken('老王'),
            IntegerLiteralExpr(1),
            IntegerLiteralExpr(9),
            []))])
Ejemplo n.º 6
0
 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('老刘')))
Ejemplo n.º 7
0
 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('老王'))
                    )
Ejemplo n.º 8
0
 def testParseConcatExpr(self):
     self.assertEqual(
         ParseExprFromStr('老王加油、2、“哈”')[0],
         ConcatExpr([
             ArithmeticExpr(VariableExpr('老王'), Keyword('加'),
                            VariableExpr('油')),
             IntegerLiteralExpr(2),
             StringLiteralExpr('哈')
         ]))
Ejemplo n.º 9
0
 def testParseConditional(self):
     self.assertEqual(
         ParseStmtFromStr('寻思:老王比五大?要行咧就唠唠:老王。')[0],
         Statement(
             STMT_CONDITIONAL,
             (
                 ComparisonExpr(VariableExpr('老王'), Keyword('大'),
                                IntegerLiteralExpr(5)),
                 # then-branch
                 Statement(STMT_SAY, VariableExpr('老王')),
                 # else-branch
                 None)))
Ejemplo n.º 10
0
 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)
                    ))
Ejemplo n.º 11
0
 def testParseInteger(self):
     self.assertEqual(ParseExprFromStr('5')[0], IntegerLiteralExpr(5))
     self.assertEqual(ParseExprFromStr('九')[0], IntegerLiteralExpr(9))
Ejemplo n.º 12
0
 def testParsingFuncCallWithParam(self):
     self.assertEqual(
         ParseToAst('整【阶乘】(五)。'),
         [Statement(STMT_CALL, CallExpr('阶乘', [IntegerLiteralExpr(5)]))])
Ejemplo n.º 13
0
 def testParseConcatExpr(self):
     self.assertEqual(
         ParseExprFromStr('老王、2')[0],
         ConcatExpr([VariableExpr('老王'),
                     IntegerLiteralExpr(2)]))