def value_grammar(file, name): grammar = Grammar(name) iClass = IntermiddleClass() lines = file.read().split("\n") non_terminals = [] terminals = [] productions = [] epsilon_prods = [] iNT = lines[0][0] for line in lines: arrayLine = line.split('>') non_terminal = arrayLine[0] non_terminals.append(non_terminal) produceds = arrayLine[1] if produceds != 'epsilon': terminalOne = produceds[0] if terminalOne == terminalOne.lower(): terminals.append(terminalOne) if len(produceds) > 1: terminalTwo = produceds[2] if terminalTwo == terminalTwo.lower(): terminals.append(terminalTwo) productions.append(line) newNonTerminals = set(non_terminals) for nt in newNonTerminals: grammar.setNonTerminals(nt) newTerminals = set(terminals) for t in newTerminals: grammar.setTerminals(t) grammar.setInitialNT(iNT) for prod in productions: grammar.setProductions(prod) string = input('Ingresar la cadena a evaluar: ') if (grammar.onlyEvaluate(string)): print("----------------------Cadena válida----------------------") else: print("----------------------Cadena invalida----------------------") print("\n----------------------Gramatica expandida----------------------") print(grammar.evaluateString(string)) print( "\n----------------------Transformada en ruta de AFD----------------------" ) print(iClass.transformAFD(grammar, string)) file.close() wait_for("Presionar enter para continuar", "\n") os.system('clear')
def validateString(): from valueFileGrammar import globalGrammars grammarFinded = {} name = input("Introducir el nombre de la gramatica: ") for grammar in globalGrammars: if name == grammar.getName(): grammarFinded = grammar break string = input("Ingresa la cadena a evaluar: ") grammarFinded.generateAP(string) grammarFinded = {} wait_for("", "\n") os.system('clear')
def generateAP(): from valueFileGrammar import globalGrammars grammarFinded = {} name = input("Introducir el nombre de la gramatica: ") for grammar in globalGrammars: if name == grammar.getName(): grammarFinded = grammar break grammarFinded.setTransitions() print("Transiciones: ") for transition in grammarFinded.getTransitions(): print(transition["string"]) grammarFinded = {} wait_for("", "\n") os.system('clear')
def value_file(file, name): afd = AFD(name) iClass = IntermiddleClass() lines = file.read().split("\n") states = [] alphabet = [] transitions = [] firstState = { 'name': '', 'status': '' } lastState = { 'name': '', 'status': '' } statesForEvaluate = [] iState = lines[0][0] for line in lines: arrayLine = line.split(";") words = arrayLine[0] states.append(words[0]) states.append(words[2]) alphabet.append(words[4]) statusState = arrayLine[1].split(",") firstStatus = statusState[0] lastStatus = statusState[1] firstState["name"] = words[0] firstState["status"] = firstStatus lastState["name"] = words[2] lastState["status"] = lastStatus if firstState['name'] == lastState['name']: if lastState not in statesForEvaluate: statesForEvaluate.append(lastState) else: if lastState not in statesForEvaluate: statesForEvaluate.append(lastState) if firstState not in statesForEvaluate: statesForEvaluate.append(firstState) firstState = {} lastState = {} newWord = f"{words[0]},{words[2]};{words[4]}" transitions.append(newWord) newStates = set(states) for state in newStates: afd.setStates(state) newAlphabet = set(alphabet) for word in newAlphabet: afd.setAlphabet(word) afd.setInitialState(iState) for state in statesForEvaluate: if state['status'] == 'true': afd.setAcceptanceStates(state['name']) for item in transitions: afd.setTransitions(item) string = input('Ingresar la cadena a evaluar: ') if (afd.onlyEvaluate(string)): print("----------------------Cadena válida----------------------") else: print("----------------------Cadena invalida----------------------") print("\n----------------------Ruta en AFD----------------------") print(afd.evaluateString(string)) print("\n----------------------Convertido en Expansión Gramática----------------------") print(iClass.transformGrammar(afd, string)) file.close() wait_for("Presionar enter para continuar", "\n") os.system('clear')
def menuValidateString(afd, gramm): while True: os.system('clear') print("Menú Validar Cadenas") print("1. Solo validar") print("2. Ruta de AFD") print("3. Expandir con gramáticas") print("4. Ayuda") print("5. Salir") opc = int(input("Escoje una opcion: ")) if opc == 1: name = input("Ingrese el nombre de la gramatica: ") for item in afd.array_afd: if (name == item.getName()): afdClass = afd.returnAFD() string = input("Ingrese la cadena a evaluar: ") if (afdClass.onlyEvaluate(string)): print("Cadena válida") else: print("Cadena invalida") else: break for item in gramm.array_grammar: if (name == item.getName()): grammClass = gramm.getGrammar() string = input("Ingrese la cadena a evaluar: ") if (grammClass.onlyEvaluate(string)): print("Cadena válida") else: print("Cadena invalida") else: break wait_for("", "\n") if opc == 2: name = input("Ingrese el nombre de la gramatica: ") for item in afd.array_afd: if (name == item.getName()): afdClass = afd.returnAFD() string = input("Ingrese la cadena a evaluar: ") print(afdClass.evaluateString(string)) for item in gramm.array_grammar: if (name == item.getName()): gramClass = gramm.getGrammar() iClass = IntermiddleClass() string = input("Ingrese la cadena a evaluar: ") print(iClass.transformAFD(gramClass, string)) wait_for("", "\n") if opc == 3: name = input("Ingrese el nombre de la gramatica: ") for item in gramm.array_grammar: if (name == item.getName()): gramClass = gramm.getGrammar() string = input("Ingrese la cadena a evaluar: ") print(gramClass.evaluateString(string)) for item in afd.array_afd: if (name == item.getName()): afdClass = afd.returnAFD() iClass = IntermiddleClass() string = input("Ingrese la cadena a evaluar: ") print(iClass.transformGrammar(afdClass, string)) wait_for("", "\n") if opc == 4: os.system('clear') print("Lenguajes Formales de Programación") print("Aux: Elmer Real") print("2") if opc == 5: os.system('clear') break
from menu import menu from press_enter import wait_for import os print("Lenguajes Formales y de Programación") print("201800722") print("A+") print("Presiona enter para continuar") wait_for("", "\n") os.system('clear') menu()