Exemple #1
0
def p_while(p):
    '''while : WHILE expression DO block'''
    p[0] = ast.WhileNode(expression=p[2], block=p[4])
Exemple #2
0
def p_stmt_while(p):
    """stmt : WHILE LROUND condn RROUND LCURLY stmt_list RCURLY"""
    p[0] = ast.WhileNode(p[3], p[6])
Exemple #3
0
def p_Whileblock(p):
    'statement :  WHILE LPAREN expression RPAREN block'
    # print("in while grammar")
    p[0] = tree.WhileNode(p[3], p[5])
Exemple #4
0
 def parse_statement(self):
     token = self.get_current_token()
     if token.is_type():
         lookup2 = self.lookup_for_n(2)
         if lookup2.word == ';':
             return self.parse_var_decl()
         elif lookup2.word == '=':
             return self.parse_var_decl_and_assign()
         elif lookup2.word == '[':
             lookup5 = self.lookup_for_n(5)
             if lookup5.word == '=':
                 return self.parse_array_decl_and_assign()
             elif lookup5.word == ';':
                 return self.parse_array_decl()
             else:
                 raise cmexception.SyntaxException(lookup5, ['=', ';'])
         else:
             raise cmexception.SyntaxException(lookup2, [';', '=', '['])
     elif token.lexme_type == LexmeType.Variable:
         lookup1 = self.lookup_for_n(1)
         if lookup1.word == '[':
             return self.parse_array_assign()
         elif lookup1.word == '=':
             return self.parse_var_assign()
         elif lookup1.word == '(':
             node = self.parse_function_call()
             self.move_for_n(1)
             return node
         else:
             raise cmexception.SyntaxException(lookup1, ['=', '['])
     elif token.word == '{':
         self.move_for_n(1)
         nodes = self.parse_stmtlist()
         right_bracket = self.get_current_token()
         if right_bracket.word == '}':
             self.move_for_n(1)
             return nodes
         else:
             raise cmexception.SyntaxException(right_bracket, ['}'])
     elif token.word == 'if':
         left_brace = self.move_for_n(1)
         if left_brace.word == '(':
             self.move_for_n(1)
             condition_expr = self.parse_expr()
             right_brace = self.get_current_token()
             if right_brace.word == ')':
                 self.move_for_n(1)
                 if_node = ast.IfNode(self.context, self.parse_statement())
                 else_node = self.parse_else_statement()
                 return ast.IfElseNode(self.context, condition_expr,
                                       if_node, else_node)
             else:
                 raise cmexception.SyntaxException(right_brace, [')'])
         else:
             raise cmexception.SyntaxException(left_brace, ['('])
     elif token.word == 'while':
         left_brace = self.lookup_for_n(1)
         if left_brace.word == '(':
             self.move_for_n(2)
             expr_node = self.parse_expr()
             right_brace = self.get_current_token()
             if right_brace.word == ')':
                 self.move_for_n(1)
                 stmtnode = self.parse_statement()
                 return ast.WhileNode(self.context, expr_node, stmtnode)
             else:
                 raise cmexception.SyntaxException(right_brace, [')'])
         else:
             raise cmexception.SyntaxException(left_brace, ['('])
     elif token.word == 'return':
         s = self.move_for_n(1)
         if s.word == ';':
             self.move_for_n(1)
             return ast.ReturnNode(self.context, token, None)
         else:
             node = self.parse_expr_or_string()
             if self.get_current_token().word == ';':
                 self.move_for_n(1)
                 return ast.ReturnNode(self.context, token, node)
             else:
                 return cmexception.SyntaxException(
                     self.get_current_token(), [';'])
     else:
         raise cmexception.SyntaxException(
             token,
             ['<legal identifier>', 'while', 'return', 'if', '<type>'])
def p_structure(p):
    ''' structure : WHILE expression "{" program "}" '''
    p[0] = ast.WhileNode([p[2], p[4]])