예제 #1
0
def p_tipo_var(p):
    """tipo_var : ID
                | ID CORCHETE_IZQ CONSTANTE_ENTERA CORCHETE_DER"""
    if len(p) == 2:
        p[0] = Nodo('tipo_var')
        p[0].val = [p[1]]
    else:
        p[0] = Nodo('tipo_var')
        p[0].val = [p[1], p[3]]
    p[0].linea = p.lineno(0)
예제 #2
0
def p_sinconizacion(p):
    """sincronizacion : COMA CONSTANTE_ENTERA
                      | COMA CONSTANTE_FLOTANTE
                      | COMA ID
                      | vacio"""
    p[0] = Nodo('sincronizacion')
    if (p[1] == ','):
        p[0].val = p[2]
    else:
        p[0].val = 'nada'
    p[0].linea = p.lineno(0)
예제 #3
0
def p_indice_arreglo(p):
    """indice_arreglo : ID CORCHETE_IZQ CONSTANTE_ENTERA CORCHETE_DER"""

    p[0] = Nodo('indice_arreglo')
    p[0].val = p[1]
    p[0].interesante = p[3]
    p[0].linea = p.lineno(0)
예제 #4
0
def p_instrumento(p):
    """instrumento : PIANO
                   | GUITARRA
                   | FLAUTA"""
    p[0] = Nodo('instrumento')
    p[0].val = p[1].lower()
    p[0].linea = p.lineno(0)
예제 #5
0
def p_elementos_arreglo(p):
    """elemento_arreglo : elemento_tocar"""

    if type(p[1]) == Nodo:
        p[0] = p[1]
    else:
        p[0] = Nodo('booleano')
        p[0].val = p[1]
        p[0].tipo = 'BOOLEANO'
    p[0].linea = p.lineno(0)
예제 #6
0
def p_numero(p):
    """numero : CONSTANTE_ENTERA
              | CONSTANTE_FLOTANTE"""
    p[0] = Nodo('numero')
    p[0].val = p[1]
    if type(p[1]) == int:
        p[0].tipo = 'ENTERO'
    else:
        p[0].tipo = 'FLOTANTE'
    p[0].linea = p.lineno(0)
예제 #7
0
def p_elemento(p):
    """elemento : paren_notas
                | llaves_notas
                | nota
                | ID"""
    if type(p[1]) == Nodo:
        p[0] = p[1]
    else:
        p[0] = Nodo('id')
        p[0].val = p[1]
    p[0].linea = p.lineno(0)
예제 #8
0
def p_nota(p):
    """nota : DO
            | RE
            | MI
            | FA
            | SOL
            | LA
            | SI"""
    p[0] = Nodo('nota')
    p[0].val = Nota()
    p[0].val.notas.append(p[1])
    p[0].tipo = 'nota'
    p[0].linea = p.lineno(0)
예제 #9
0
def p_expresion(p):
    """expresion : PAREN_IZQ expresion PAREN_DER
                 | ID
                 | numero
                 | BOOLEANO
                 | indice_arreglo"""
    if len(p) == 2:
        if type(p[1]) != Nodo:
            if p[1] == 'verdadero' or p[1] == 'falso':
                p[0] = Nodo('booleano')
                p[0].tipo = 'BOOLEANO'
            else:
                p[0] = Nodo('id')
            p[0].val = p[1]
        else:
            p[0] = p[1]
    else:
        p[0] = p[2]
    p[0].linea = p.lineno(0)
예제 #10
0
def p_tempo(p):
    """tempo : CONSTANTE_ENTERA
             | ID"""
    p[0] = Nodo('tempo')
    p[0].val = p[1]
    p[0].linea = p.lineno(0)
예제 #11
0
def p_funcion(p):
    """funcion : FUNCION MAIN PAREN_IZQ PAREN_DER cuerpo"""
    aux = Nodo('main')
    aux.val = p[2]
    p[0] = Nodo('funcion', [aux, p[5]])
    p[0].linea = p.lineno(0)