def p_expresion_primitiva(t): '''primitiva : ENTERO | DECIMAL | CADENA | CADENA2 | TEMP | PARAM | RET | PILA | RA | PUNTERO | acceso_lista''' op = Operacion() if (t.slice[1].type == 'CADENA' or t.slice[1].type == 'CADENA2'): op.Primitivo( Primitivo(str(t[1]), t.slice[1].lineno, find_column(t.slice[1]))) gramatical = G.ValorAscendente('primitiva -> CADENA', 'primitiva.val = str(CADENA);', None) func(2, gramatical) elif (t.slice[1].type == 'DECIMAL'): op.Primitivo( Primitivo(float(t[1]), t.slice[1].lineno, find_column(t.slice[1]))) gramatical = G.ValorAscendente('primitiva -> FLOAT', 'primitiva.val = float(FLOAT);', None) func(2, gramatical) elif (t.slice[1].type == 'ENTERO'): op.Primitivo( Primitivo(int(t[1]), t.slice[1].lineno, find_column(t.slice[1]))) gramatical = G.ValorAscendente('primitiva -> ENTERO', 'primitiva.val = int(ENTERO);', None) func(2, gramatical) elif (t.slice[1].type == 'TEMP') or (t.slice[1].type == 'PARAM') or ( t.slice[1].type == 'RET') or (t.slice[1].type == 'PILA') or ( t.slice[1].type == 'RA') or (t.slice[1].type == 'PUNTERO'): op.Indentficador(t[1], t.slice[1].lineno, find_column(t.slice[1])) gramatical = G.ValorAscendente('primitiva -> tipo_var', 'primitiva.val = tipo_var.val;', None) func(2, gramatical) elif (t.slice[1].type == 'acceso_lista'): op.AccesoLista(t[1], t.lexer.lineno, 1) lista = func(1, None).copy() gramatical = G.ValorAscendente('primitiva -> acceso_lista', 'primitiva.val = acceso_lista.val;', lista) func(0, gramatical) t[0] = op
def p_instruccion_imprimir_cadena(t): '''imprimir_instr : IMPRIMIR PARIZQ CADENA PARDER PTCOMA | IMPRIMIR PARIZQ CADENA2 PARDER PTCOMA''' op = Operacion() op.Primitivo(Primitivo(t[3], t.slice[1].lineno, 0)) t[0] = Imprimir(op, t.slice[1].lineno, find_column(t.slice[1])) lista = func(1, None).copy() gramatical = G.ValorAscendente( 'imprimir_instr ->IMPRIMIR PARIZQ CADENA PARDER PTCOMA', 'imprimir_instr.instr = Print(CADENA);', lista) func(0, gramatical)