コード例 #1
0
def p_instruccion_imprimir(t):
    'imprimir_instr     : IMPRIMIR PARIZQ tipo_var PARDER PTCOMA'
    op = Operacion()
    op.Indentficador(t[3], t.slice[1].lineno, find_column(t.slice[2]))
    op.linea = t.slice[1].lineno
    op.columna = find_column(t.slice[1])
    t[0] = Imprimir(op, t.slice[1].lineno, find_column(t.slice[1]))
コード例 #2
0
def p_expresion_relacional(t):
    '''expresion_relacional :   primitiva MENQUE primitiva 
                            |   primitiva MAYQUE primitiva 
                            |   primitiva MEIQUE primitiva
                            |   primitiva MAIQUE primitiva
                            |   primitiva IGUALQUE primitiva 
                            |   primitiva NIGUALQUE primitiva '''
    op = Operacion()
    if (t.slice[2].type == 'MENQUE'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.MENOR_QUE, t.slice[2].lineno,
                     1)

    elif (t.slice[2].type == 'MAYQUE'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.MAYOR_QUE, t.slice[2].lineno,
                     1)

    elif (t.slice[2].type == 'MEIQUE'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.MENOR_IGUA_QUE,
                     t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'MAIQUE'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.MAYOR_IGUA_QUE,
                     t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'IGUALQUE'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.IGUAL_IGUAL, t.slice[2].lineno,
                     1)

    elif (t.slice[2].type == 'NIGUALQUE'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.DIFERENTE_QUE,
                     t.slice[2].lineno, 1)

    t[0] = op
コード例 #3
0
def p_expresion_logica(t):
    '''expresion_logica   : primitiva AND primitiva 
                          | primitiva OR primitiva
                          | primitiva XOR primitiva '''

    op = Operacion()
    if (t.slice[2].type == 'AND'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.AND, t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'OR'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.OR, t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'XOR'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.XOR, t.slice[2].lineno, 1)

    t[0] = op
コード例 #4
0
def p_expresion_numerica(t):
    '''expresion_numerica   :   primitiva MAS primitiva 
                            |   primitiva MENOS primitiva 
                            |   primitiva POR primitiva
                            |   primitiva DIVIDIDO primitiva
                            |   primitiva RESTO primitiva'''

    op = Operacion()
    if (t.slice[2].type == 'MAS'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.SUMA, t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'MENOS'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.RESTA, t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'POR'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.MULTIPLICACION,
                     t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'DIVIDIDO'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.DIVISION, t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'RESTO'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.MODULO, t.slice[2].lineno, 1)

    t[0] = op
コード例 #5
0
def p_instruccion_imprimir_cadena(t):
    '''imprimir_instr     : IMPRIMIR PARIZQ CADENA  PARDER PTCOMA
                          | IMPRIMIR PARIZQ CADENA2 PARDER PTCOMA'''
    op = Operacion()
    if (t.slice[3].type == 'CADENA2'):
        op.Primitivo(Primitivo("\"" + t[3] + "\"", t.slice[1].lineno, 0))
    else:
        op.Primitivo(Primitivo("'" + t[3] + "'", t.slice[1].lineno, 0))
    op.linea = t.slice[1].lineno
    op.columna = find_column(t.slice[1])
    t[0] = Imprimir(op, t.slice[1].lineno, find_column(t.slice[1]))
コード例 #6
0
def p_expresion_bit_bit(t):
    '''expresion_bit_bit  : primitiva PAND primitiva 
                          | primitiva BOR primitiva
                          | primitiva XORR primitiva 
                          | primitiva SHIFTI primitiva
                          | primitiva SHIFTD primitiva'''

    op = Operacion()
    if (t.slice[2].type == 'PAND'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.PAND, t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'BOR'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.BOR, t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'XORR'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.XORR, t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'SHIFTI'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.SHIFTI, t.slice[2].lineno, 1)

    elif (t.slice[2].type == 'SHIFTD'):
        op.Operacion(t[1], t[3], TIPO_OPERACION.SHIFTD, t.slice[2].lineno, 1)

    t[0] = op
コード例 #7
0
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 == 'CADENA2'):
        op.Primitivo(
            Primitivo("\"" + str(t[1]) + "\"", t.slice[1].lineno,
                      find_column(t.slice[1])))
    elif (t.slice[1].type == 'CADENA'):
        op.Primitivo(
            Primitivo("'" + str(t[1]) + "'", t.slice[1].lineno,
                      find_column(t.slice[1])))
    elif (t.slice[1].type == 'DECIMAL'):
        op.Primitivo(
            Primitivo(float(t[1]), t.slice[1].lineno, find_column(t.slice[1])))

    elif (t.slice[1].type == 'ENTERO'):
        op.Primitivo(
            Primitivo(int(t[1]), t.slice[1].lineno, find_column(t.slice[1])))

    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]))
        op.linea = t.slice[1].lineno
        op.columna = find_column(t.slice[1])

    elif (t.slice[1].type == 'acceso_lista'):
        op.linea = t.lexer.lineno
        op.columna = 1
        op.AccesoLista(t[1], t.lexer.lineno, 1)

    t[0] = op
コード例 #8
0
def p_absoluto(t):
    'absoluto : ABS PARIZQ primitiva PARDER '
    op = Operacion()
    op.ValorAbsoluto(t[3], t.slice[1].lineno, find_column(t.slice[1]))
    t[0] = op
コード例 #9
0
def p_expresion_negacion_bit(t):
    'expresion_bit_bit   :   NOTR primitiva %prec NOTR'
    op = Operacion()
    op.OperacionNotBit(t[2], t.slice[1].lineno, find_column(t.slice[1]))
    t[0] = op
コード例 #10
0
def p_expresion_negacion(t):
    'expresion_logica   :   NOT primitiva %prec NOT'
    op = Operacion()
    op.OperacionNot(t[2], t.slice[1].lineno, find_column(t.slice[1]))
    t[0] = op
コード例 #11
0
def p_expresion_unaria(t):
    'expresion_unaria   :   MENOS primitiva %prec UMENOS'
    op = Operacion()
    op.OperacionUnaria(t[2], t.slice[1].lineno, find_column(t.slice[1]))
    t[0] = op
コード例 #12
0
def p_puntero(t):
    'puntero : tipo_var IGUAL PAND  tipo_var PTCOMA '
    op = Operacion()
    op.Indentficador(t[4], t.slice[2].lineno, find_column(t.slice[3]) + 1)
    t[0] = Asignacion(t[1], op, t.slice[2].lineno, 1, True)
コード例 #13
0
def p_asingacion_array(t):
    'asignacion : tipo_var IGUAL ARRAY PARIZQ PARDER PTCOMA '
    op = Operacion()
    op.Primitivo(Primitivo("array()", 0, 0))
    t[0] = Asignacion(t[1], op, t.slice[2].lineno, 1, False)