def ExpresionNumero(c): global valor, fila, columna, flagExpressionNumero, cont, flagExpressionDecimal if esnumero(c): columna += 1 valor += c return elif ord(c) == 46: valor += c flagExpressionDecimal = True flagExpressionNumero = False return elif ord(c) == 59: columna += 1 tablasimbolos.append( Simbolo("Numero", valor + ".00", fila, (columna - 1 - len(valor)))) columna += 1 tablasimbolos.append(Simbolo("punto_y_coma", ";", fila, (columna - 2))) valor = "" flagExpressionNumero = False elif ord(c) == 32: columna += 1 tablasimbolos.append( Simbolo("Numero", valor + ".00", fila, (columna - 1 - len(valor)))) valor = "" flagExpressionNumero = False else: Error(c, "Error Lexico | caracter no valido", fila, columna)
def ExpresionDecimal(c, val): global valor, fila, columna, cont, flagExpressionDecimal conta = cont if esnumero(c) & (cont <= 2): val += c cont = cont + 1 valor = val return elif (cont > 0) & (cont <= 2) & (ord(c) == 32): columna += 1 tablasimbolos.append( Simbolo("Numero", valor, fila, (columna - 1 - len(valor)))) valor = "" cont = 0 flagExpressionDecimal = False elif (cont > 0) & (cont <= 2) & (ord(c) == 59): columna += 1 tablasimbolos.append( Simbolo("Numero", valor, fila, (columna - 1 - len(valor)))) columna += 1 tablasimbolos.append(Simbolo("punto_y_coma", ";", fila, (columna - 2))) valor = "" flagExpressionDecimal = False cont = 0 else: val += c Error(valor, "Se espera un numero con formato ##.##", fila, columna) flagExpressionDecimal = False cont = 0 return
def ExpresionNumero(c): global valor, fila, columna, flagExpressionNumero h = ord(c) if esnumero(c) | (ord(c) == 46): columna += 1 valor += c return if ord(c) == 44: columna += 1 tablasOrden.append( Simbolo("Numero", valor, fila, (columna - 1 - len(valor)))) columna += 1 tablasOrden.append(Simbolo("coma", ",", fila, (columna - 2))) valor = "" flagExpressionNumero = False elif ord(c) == 10: columna += 1 tablasOrden.append( Simbolo("Numero", valor, fila, (columna - 1 - len(valor)))) valor = "" flagExpressionNumero = False elif ord(c) == 32: columna += 1 tablasOrden.append( Simbolo("Numero", valor, fila, (columna - 1 - len(valor)))) valor = "" flagExpressionNumero = False elif ord(c) == 37: columna += 1 tablasOrden.append( Simbolo("Propina", valor, fila, (columna - 1 - len(valor)))) valor = "" flagExpressionNumero = False else: Error(c, "", fila, columna)
def analizador(c): if CondicionesOrden.flagExpressionId: CondicionesOrden.ExpresionId(c) elif CondicionesOrden.flagExpressionCadena: CondicionesOrden.ExpresionCadena(c) elif CondicionesOrden.flagExpressionNumero: CondicionesOrden.ExpresionNumero(c) elif CondicionesOrden.esletra(c) == True: CondicionesOrden.columna += 1 CondicionesOrden.valor = c CondicionesOrden.flagExpressionId = True elif CondicionesOrden.esnumero(c) == True: CondicionesOrden.columna += 1 CondicionesOrden.valor = c CondicionesOrden.flagExpressionNumero = True elif ord(c) == 39: #' CondicionesOrden.flagExpressionCadena = True CondicionesOrden.columna += 1 elif ord(c) == 44: #, CondicionesOrden.columna += 1 CondicionesOrden.valor = c CondicionesOrden.tablasOrden.append( Simbolo("coma", ",", CondicionesOrden.fila, (CondicionesOrden.columna - 2))) CondicionesOrden.valor = "" elif ord(c) == 10: #Salto de Linea CondicionesOrden.fila += 1 CondicionesOrden.columna = 0 CondicionesOrden.valor = "" elif ord(c) == 32: #espacio CondicionesOrden.columna += 1 CondicionesOrden.valor = "" else: CondicionesOrden.Error(c, "", CondicionesOrden.fila, CondicionesOrden.columna)
def ExpresionCadena(c): global valor, fila, columna, flagExpressionCadena if ord(c) == 39: columna += 1 tablasimbolos.append( Simbolo("Cadena", valor, fila, (columna - 1 - len(valor)))) valor = "" flagExpressionCadena = False return columna += 1 valor += c
def ExpresionId(c): global valor, columna, fila, flagExpressionId if esletra(c) or esnumero(c) or ord(c) == 95 or ord(c) == 45: valor += c columna += 1 return elif ord(c) == 32: valor += c columna += 1 tablasOrden.append( Simbolo("ID", valor, fila, (columna - 1 - len(valor)))) valor = "" flagExpressionId = False elif ord(c) == 10: tablasOrden.append(Simbolo("ID", valor, fila, (columna - len(valor)))) fila += 1 columna += 1 valor = "" flagExpressionId = False else: Error(c, "", fila, columna)
def ExpresionId(c): global valor, columna, fila, flagExpressionId if esletra(c) or esnumero(c) or ord(c) == 95: valor += c columna += 1 return elif ord(c) == 32: columna += 1 tablasimbolos.append( Simbolo("ID", valor, fila, (columna - 1 - len(valor)))) valor = "" flagExpressionId = False elif ord(c) == 61: tablasimbolos.append(Simbolo("ID", valor, fila, (columna - len(valor)))) columna += 1 tablasimbolos.append(Simbolo("Simbolo_igual", "=", fila, (columna - 2))) valor = "" flagExpressionId = False elif ord(c) == 59: tablasimbolos.append(Simbolo("ID", valor, fila, (columna - len(valor)))) columna += 1 tablasimbolos.append(Simbolo("punto_y_coma", ";", fila, (columna - 2))) valor = "" flagExpressionId = False elif ord(c) == 10: tablasimbolos.append(Simbolo("ID", valor, fila, (columna - len(valor)))) fila += 1 columna += 1 valor = "" flagExpressionId = False else: Error( c, "Error Lexico | expresion no valida, tiene un caracter no valido", fila, columna)
def analizador(c): if Condiciones.flagExpressionId: Condiciones.ExpresionId(c) elif Condiciones.flagExpressionCadena: Condiciones.ExpresionCadena(c) elif Condiciones.flagExpressionNumero: Condiciones.ExpresionNumero(c) elif Condiciones.flagExpressionDecimal: Condiciones.ExpresionDecimal(c, Condiciones.valor) elif Condiciones.esletra(c) == True: Condiciones.columna += 1 Condiciones.valor = c Condiciones.flagExpressionId = True elif Condiciones.esnumero(c) == True: Condiciones.columna += 1 Condiciones.valor = c Condiciones.flagExpressionNumero = True elif ord(c) == 61: #= Condiciones.columna += 1 Condiciones.valor = c Condiciones.tablasimbolos.append( Simbolo("Simbolo_igual", "=", Condiciones.fila, (Condiciones.columna - 2))) Condiciones.valor = c elif ord(c) == 39: #' Condiciones.flagExpressionCadena = True Condiciones.columna += 1 elif ord(c) == 91: #[ Condiciones.columna += 1 Condiciones.valor = c Condiciones.tablasimbolos.append( Simbolo("simbolo_llave_abre", "[", Condiciones.fila, (Condiciones.columna - 2))) Condiciones.valor = "" elif ord(c) == 93: #] Condiciones.columna += 1 Condiciones.valor = c Condiciones.tablasimbolos.append( Simbolo("simbolo_llave_cierra", "]", Condiciones.fila, (Condiciones.columna - 2))) Condiciones.valor = "" elif ord(c) == 59: #; Condiciones.columna += 1 Condiciones.valor = c Condiciones.tablasimbolos.append( Simbolo("punto_y_coma", ";", Condiciones.fila, (Condiciones.columna - 2))) Condiciones.valor = "" elif ord(c) == 58: #: Condiciones.columna += 1 Condiciones.valor = c Condiciones.tablasimbolos.append( Simbolo("Dos_puntos", ":", Condiciones.fila, (Condiciones.columna - 2))) Condiciones.valor = "" elif ord(c) == 10: #Salto de Linea Condiciones.fila += 1 Condiciones.columna = 0 Condiciones.valor = "" elif ord(c) == 32: #espacio Condiciones.columna += 1 Condiciones.valor = "" else: Condiciones.Error(c, "", Condiciones.fila, Condiciones.columna)
def Error(simbolo, expectativa, fila, columna): tablaErrores.append(Simbolo(simbolo, expectativa, fila, columna))