def p_stmt_print_cond_postfix_assign(p): 'stmt : if_assign IF condition_list ELSE expression SPLIT' p[0] = DyqExecute(action='assign', params=[ p[1][0], DyqExecute(action='condition', params=[p[3], p[1][1], p[5]]) ])
def p_stmt_print_cond(p): ''' stmt : IF condition_list COLON stmt_print SPLIT | IF condition_list COLON SPLIT stmt_print SPLIT ''' # 分为上面两种情况,一个stmt的位置在4,一个在5(0开始计数) if len(p) < 7: p[0] = DyqExecute(action='condition', params=[p[2], p[4]]) else: p[0] = DyqExecute(action='condition', params=[p[2], p[5]])
def p_condition_list(p): ''' condition_list : expression | condition_list AND expression | condition_list OR expression ''' if len(p) > 2: p[0] = DyqExecute(action='logop', params=p[1:]) else: p[0] = p[1]
def p_expression_two_operator(p): ''' expression : expression ADD expression | expression REM expression | expression MUL expression | expression DIV expression | expression MOD expression | expression GT expression | expression LT expression | expression GE expression | expression LE expression | expression EQ expression | expression NE expression | expression POW expression ''' p[0] = DyqExecute(action='binop', params=p[1:])
def p_stmt_print_assign(p): ''' stmt : ID ASSIGN expression SPLIT | ID ASSIGN condition_list SPLIT ''' p[0] = DyqExecute(action='assign', params=[p[1], p[3]])
def p_stmt_print_cond_postfix_else(p): 'stmt : stmt_print IF condition_list ELSE stmt_print SPLIT' p[0] = DyqExecute(action='condition', params=[p[3], p[1], p[5]])
def p_stmt_print_for(p): 'stmt : FOR ID IN range COLON stmt_print SPLIT' p[0] = DyqExecute(action='loop', params=[p[2], p[4], p[6]])
def p_stmt_print_print(p): ''' stmt_print : PRINT LPAREN expr_list RPAREN ''' p[0] = DyqExecute(action='print', params=p[3])
def p_expression_var(p): 'expression : ID' p[0] = DyqExecute(action='get', params=[p[1]])
def show_exe(): """显示最终执行的结果""" for x in parses.parse(data): DyqExecute.resolve(x)