Beispiel #1
0
 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)))
                     ]))
         ])
Beispiel #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)))
     ])
Beispiel #3
0
 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)))
                     ]))
         ])
Beispiel #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)))
     ])
Beispiel #5
0
 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))))
     ])
Beispiel #6
0
 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))))
     ])
Beispiel #7
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)))
Beispiel #8
0
 def testParseConditional(self):
     self.assertEqual(
         ParseStmtFromStr('寻思:老王比五大?要行咧就唠唠:老王。')[0],
         Statement(
             STMT_CONDITIONAL,
             (
                 ComparisonExpr(VariableExpr(Token(TK_IDENTIFIER, '老王')),
                                Keyword('大'),
                                LiteralExpr(Token(TK_INTEGER_LITERAL, 5))),
                 # then-branch
                 Statement(STMT_SAY, VariableExpr(Token(
                     TK_IDENTIFIER, '老王'))),
                 # else-branch
                 None)))
Beispiel #9
0
 def DisabledTestParsingComparison(self):
   self.assertEquals(
       ParseToAst(u'唠唠:2比5大。'),
       [Statement(
           STMT_SAY,
           ComparisonExpr(2, 'GT', 5)
       )])
Beispiel #10
0
 def testParsingFuncCallWithParam(self):
     self.assertEqual(ParseToAst('整【阶乘】(五)。'), [
         Statement(
             STMT_CALL,
             CallExpr(Token(TK_IDENTIFIER, '阶乘'),
                      [LiteralExpr(Token(TK_INTEGER_LITERAL, 5))]))
     ])
Beispiel #11
0
 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)), []))
     ])
Beispiel #12
0
 def testParsingComparison(self):
     self.assertEquals(ParseToAst('唠唠:2比5大。'), [
         Statement(
             STMT_SAY,
             ComparisonExpr(IntegerLiteralExpr(2), Keyword('大'),
                            IntegerLiteralExpr(5)))
     ])
Beispiel #13
0
 def testParsingFuncDefWithParam(self):
   self.assertEqual(
       ParseToAst(u'【阶乘】(几)咋整:整完了。'),
       [Statement(STMT_FUNC_DEF,
                  (Token(TK_IDENTIFIER, u'阶乘'),
                   [Token(TK_IDENTIFIER, u'几')],  # Formal parameters.
                   []  # Function body.
                  ))])
Beispiel #14
0
 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))))
     ])
Beispiel #15
0
 def testParsingFuncDefWithParam(self):
   self.assertEqual(
       ParseToAst('【阶乘】(那啥)咋整:整完了。'),
       [Statement(STMT_FUNC_DEF,
                  (IdentifierToken('阶乘'),
                   [IdentifierToken('那啥')],  # Formal parameters.
                   []  # Function body.
                  ))])
Beispiel #16
0
 def testParsingLoop(self):
   self.assertEqual(
       ParseToAst('老王从1到9磨叽:磨叽完了。'),
       [Statement(
           STMT_LOOP,
           (IdentifierToken('老王'),
            IntegerLiteralExpr(1),
            IntegerLiteralExpr(9),
            []))])
Beispiel #17
0
 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('老张'),
            []))])
Beispiel #18
0
 def testParsingLoop(self):
     self.assertEqual(ParseToAst('老王从1到9磨叽:磨叽完了。'), [
         Statement(STMT_LOOP, (VariableExpr('老王'), NumberLiteralExpr(1),
                               NumberLiteralExpr(9), []))
     ])
Beispiel #19
0
 def testParsingFuncCallWithParam(self):
     self.assertEqual(
         ParseToAst('整【阶乘】(五)。'),
         [Statement(STMT_CALL, CallExpr('阶乘', [IntegerLiteralExpr(5)]))])