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_tipo_dato(p): """tipo_dato : ENTERO | FLOTANTE | BOOL | NOTA""" p[0] = Nodo('tipo_dato') p[0].tipo = p[1].upper() 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_lista_tocar(p): """lista_tocar : lista_tocar COMA elemento_tocar | elemento_tocar""" if len(p) == 4: p[0] = Nodo('lista_tocar', [p[1], p[3]]) else: p[0] = Nodo('lista_tocar', [p[1]]) p[0].tipo = 'nota' 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_potencia_nota(p): """potencia_nota : elemento_potencia POTENCIA numero""" p[0] = Nodo('potencia_nota', [p[1], p[3]]) p[0].tipo = 'nota' p[0].linea = p.lineno(0)
def p_tiempo_nota(p): """tiempo_nota : numero elemento | numero modificador_nota""" p[0] = Nodo('tiempo_nota', [p[1], p[2]]) p[0].tipo = 'nota' p[0].linea = p.lineno(0)
def p_llaves_notas(p): """llaves_notas : LLAVE_IZQ lista_notas LLAVE_DER""" p[0] = Nodo('llaves_notas', [p[2]]) p[0].tipo = 'nota' p[0].linea = p.lineno(0)
def p_parentesis_notas(p): """paren_notas : PAREN_IZQ lista_notas PAREN_DER""" p[0] = Nodo('paren_notas', [p[2]]) p[0].tipo = 'nota' p[0].linea = p.lineno(0)