Пример #1
0
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')
Пример #2
0
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')
Пример #3
0
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')
Пример #4
0
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')
Пример #5
0
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
Пример #6
0
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()