示例#1
0
def p_expresion_2(t):
    ''' expresion : BBNOT expresion
                    | NOT expresion
                    | MENOS expresion
                    | INCREMENTO IDENTIFICADOR
                    | DECREMENTO IDENTIFICADOR
                    | BBAND expresion
    '''
    reporte_gramatical.append([
        ' expresion -> ' + t[1] + ' expresion', 't[0] = Expresion(t[2],None,' +
        t[1] + ',t.lineno(1),find_column(entrada, t.slice[1]),t[1])'
    ])
    if t[1] == '!':
        t[0] = Expresion(t[2], None, TIPO_OPERACION.NOT, t.lineno(1),
                         find_column(entrada, t.slice[1]), t[1])
    if t[1] == '~':
        t[0] = Expresion(t[2], None, TIPO_OPERACION.BBNOT, t.lineno(1),
                         find_column(entrada, t.slice[1]), t[1])
    if t[1] == '-':
        t[0] = Expresion(t[2], None, TIPO_OPERACION.MENOS_UNARIO, t.lineno(1),
                         find_column(entrada, t.slice[1]), t[1])
    if t[1] == '++':
        t[0] = Expresion(t[2], None, TIPO_OPERACION.PRE_INC, t.lineno(1),
                         find_column(entrada, t.slice[1]), '+')
    if t[1] == '--':
        t[0] = Expresion(t[2], None, TIPO_OPERACION.PRE_DEC, t.lineno(1),
                         find_column(entrada, t.slice[1]), '-')
    if t[1] == '&': t[0] = t[2]
示例#2
0
def p_expresion_2_post(t):
    ''' expresion : IDENTIFICADOR INCREMENTO
                | IDENTIFICADOR DECREMENTO
    '''
    reporte_gramatical.append([
        ' expresion -> expresion ' + t[2], 't[0] = Expresion(t[1],None,' +
        t[2] + ',t.lineno(1),find_column(entrada, t.slice[1]),t[1])'
    ])
    if t[2] == '++':
        t[0] = Expresion(t[1], None, TIPO_OPERACION.POST_INC, t.lineno(1),
                         find_column(entrada, t.slice[1]), '+')
    if t[2] == '--':
        t[0] = Expresion(t[1], None, TIPO_OPERACION.POST_DEC, t.lineno(1),
                         find_column(entrada, t.slice[1]), '-')
示例#3
0
def p_ins_dec_post(t):
    'inc_dec : IDENTIFICADOR DECREMENTO'
    reporte_gramatical.append([
        'inc_dec -> IDENTIFICADOR DECREMENTO',
        'exp = Expresion(t[1],Expresion(1,None,TIPO_OPERACION.ENTERO,t.lineno(1),find_column(entrada, t.slice[1])),TIPO_OPERACION.RESTA,t.lineno(1),find_column(entrada, t.slice[1]))\nt[0] = Asignacion(t[1],None,\'=\',exp,t.lineno(1),find_column(entrada, t.slice[1]))'
    ])
    exp_id = Expresion(t[1], None, TIPO_OPERACION.IDENTIFICADOR, t.lineno(1),
                       find_column(entrada, t.slice[1]))
    exp_1 = Expresion(1, None, TIPO_OPERACION.ENTERO, t.lineno(1),
                      find_column(entrada, t.slice[1]))
    exp = Expresion(exp_id, exp_1, TIPO_OPERACION.RESTA, t.lineno(1),
                    find_column(entrada, t.slice[1]), '-')
    t[0] = Asignacion(t[1], None, '=', exp, t.lineno(1),
                      find_column(entrada, t.slice[1]))
示例#4
0
def p_sizeof_TIPO(t):
    ' expresion : SIZEOF PIZQ tipo PDER'
    reporte_gramatical.append([
        ' expresion -> SIZEOF PIZQ tipo PDER',
        't[0] = Expresion(tam,None,TIPO_OPERACION.ENTERO,t.lineno(1),find_column(entrada, t.slice[1]))'
    ])
    if t[3] == 'int' or t[1] == 'float':
        t[0] = Expresion(4, None, TIPO_OPERACION.ENTERO, t.lineno(1),
                         find_column(entrada, t.slice[1]))
    elif t[3] == 'double':
        t[0] = Expresion(8, None, TIPO_OPERACION.ENTERO, t.lineno(1),
                         find_column(entrada, t.slice[1]))
    elif t[3] == 'char':
        t[0] = Expresion(1, None, TIPO_OPERACION.ENTERO, t.lineno(1),
                         find_column(entrada, t.slice[1]))
示例#5
0
def p_expresion_1_llamada(t):
    'expresion : llamada '
    reporte_gramatical.append([
        ' expresion -> llamada',
        't[0] = Expresion(t[1],None,TIPO_OPERACION.LLAMADA,0,0)'
    ])
    t[0] = Expresion(t[1], None, TIPO_OPERACION.LLAMADA, 0, 0)
示例#6
0
def p_sizeof(t):
    ' expresion : SIZEOF PIZQ expresion PDER'
    reporte_gramatical.append([
        ' expresion -> SIZEOF PIZQ expresion PDER',
        't[0] = Expresion(4,None,TIPO_OPERACION.ENTERO,t.lineno(1),find_column(entrada, t.slice[1]))'
    ])
    t[0] = Expresion(4, None, TIPO_OPERACION.ENTERO, t.lineno(1),
                     find_column(entrada, t.slice[1]))
示例#7
0
def p_expresion_1_identificador(t):
    'expresion : IDENTIFICADOR '
    reporte_gramatical.append([
        ' expresion -> IDENTIFICADOR',
        't[0] = Expresion(t[1],None,TIPO_OPERACION.IDENTIFICADOR,t.lineno(1),find_column(entrada, t.slice[1]))'
    ])
    t[0] = Expresion(t[1], None, TIPO_OPERACION.IDENTIFICADOR, t.lineno(1),
                     find_column(entrada, t.slice[1]))
示例#8
0
def p_expresion_1_caracter(t):
    'expresion : CARACTER'
    reporte_gramatical.append([
        ' expresion -> CARACTER',
        't[0] = Expresion(t[1],None,TIPO_OPERACION.CARACTER,t.lineno(1),find_column(entrada, t.slice[1]))'
    ])
    t[0] = Expresion(t[1], None, TIPO_OPERACION.CARACTER, t.lineno(1),
                     find_column(entrada, t.slice[1]))
示例#9
0
def p_expresion_1_decimal(t):
    'expresion : DECIMAL '
    reporte_gramatical.append([
        ' expresion -> DECIMAL',
        't[0] = Expresion(t[1],None,TIPO_OPERACION.DECIMAL,t.lineno(1),find_column(entrada, t.slice[1]))'
    ])
    t[0] = Expresion(t[1], None, TIPO_OPERACION.DECIMAL, t.lineno(1),
                     find_column(entrada, t.slice[1]))
示例#10
0
def p_expresion_1_entero(t):
    ''' expresion : ENTERO '''
    reporte_gramatical.append([
        ' expresion -> ENTERO',
        't[0] = Expresion(t[1],None,TIPO_OPERACION.ENTERO,t.lineno(1),find_column(entrada, t.slice[1]))'
    ])
    t[0] = Expresion(t[1], None, TIPO_OPERACION.ENTERO, t.lineno(1),
                     find_column(entrada, t.slice[1]))
示例#11
0
def p_expresion_2_accesos(t):
    'expresion : IDENTIFICADOR accesos_generales'
    reporte_gramatical.append([
        ' expresion -> IDENTIFICADOR accesos_generales',
        't[0] = Acceso(t[1],t[2],t.lineno(1),find_column(entrada, t.slice[1]))'
    ])
    val = Acceso(t[1], t[2], t.lineno(1), find_column(entrada, t.slice[1]))
    t[0] = Expresion(val, None, TIPO_OPERACION.ACCESO_ARREGLO, t.lineno(1),
                     find_column(entrada, t.slice[1]))
示例#12
0
def p_casteos(t):
    ' expresion : PIZQ tipo PDER expresion'
    reporte_gramatical.append([
        ' expresion -> PIZQ tipo PDER expresion',
        't[0] = Expresion(t[4],None,tipo,t.lineno(1),find_column(entrada, t.slice[1]))'
    ])
    if t[2] == 'int': tipo = TIPO_OPERACION.CASTEO_ENTERO
    elif t[2] == 'double' or t[2] == 'float':
        tipo = TIPO_OPERACION.CASTEO_DECIMAL
    elif t[2] == 'char':
        tipo = TIPO_OPERACION.CASTEO_CARACTER
    t[0] = Expresion(t[4], None, tipo, t.lineno(1),
                     find_column(entrada, t.slice[1]), t[2])
示例#13
0
def p_expresion_3(t):
    ''' expresion : expresion MAS expresion
                | expresion MENOS expresion
                | expresion POR expresion
                | expresion DIVIDIDO expresion
                | expresion MODULO expresion
                | expresion AND expresion
                | expresion OR expresion
                | expresion BBAND expresion
                | expresion BBOR expresion
                | expresion BBXOR expresion
                | expresion BBIZQ expresion
                | expresion BBDER expresion
                | expresion IGUAL_QUE expresion
                | expresion DESIGUAL_QUE expresion
                | expresion MENOR_QUE expresion
                | expresion MAYOR_QUE expresion
                | expresion MENOR_IGUAL_QUE expresion
                | expresion MAYOR_IGUAL_QUE expresion
    '''
    reporte_gramatical.append([
        ' expresion -> expresion ' + t[2] + ' expresion',
        't[0] = Expresion(t[1],t[3],' + t[2] +
        ',t.lineno(2),find_column(entrada, t.slice[2]),t[2])'
    ])
    if t[2] == '+':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.SUMA, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '-':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.RESTA, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '*':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.MULTIPLICACION,
                         t.lineno(2), find_column(entrada, t.slice[2]), t[2])
    if t[2] == '/':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.DIVISION, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '%':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.RESIDUO, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '<':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.MENOR_QUE, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '>':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.MAYOR_QUE, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '<=':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.MENOR_IGUAL_QUE,
                         t.lineno(2), find_column(entrada, t.slice[2]), t[2])
    if t[2] == '>=':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.MAYOR_IGUAL_QUE,
                         t.lineno(2), find_column(entrada, t.slice[2]), t[2])
    if t[2] == '==':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.IGUAL_QUE, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '!=':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.DISTINTO_QUE, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '&&':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.AND, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '||':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.OR, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '&':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.BBAND, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '|':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.BBOR, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '^':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.BBXOR, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '<<':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.BBIZQ, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])
    if t[2] == '>>':
        t[0] = Expresion(t[1], t[3], TIPO_OPERACION.BBDER, t.lineno(2),
                         find_column(entrada, t.slice[2]), t[2])