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)
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)
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)
def p_instrumento(p): """instrumento : PIANO | GUITARRA | FLAUTA""" p[0] = Nodo('instrumento') p[0].val = p[1].lower() p[0].linea = p.lineno(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)
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)
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)
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)
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)
def p_tempo(p): """tempo : CONSTANTE_ENTERA | ID""" p[0] = Nodo('tempo') p[0].val = p[1] p[0].linea = p.lineno(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)