Exemple #1
0
    def transformGrammar(self, afd, string):
        non_terminals = afd.states
        terminals = afd.alphabet
        initial_nt = afd.initialState
        productions = afd.transitions
        epsilon_prod = ""
        msg = ""

        for item in afd.getAcceptanceStates():
            prod = {'fS': item, 't': 'epsilon', 'lS': ""}
            # epsilon_prod = f"{item}>epsilon"
            productions.append(prod)

        for item in productions:
            item["String"] = f"{item['fS']}>{item['t']} {item['lS']}"

        grammar = Grammar(afd.getName())
        for nt in non_terminals:
            grammar.setNonTerminals(nt)

        for t in terminals:
            grammar.setTerminals(t)

        grammar.setInitialNT(initial_nt)

        for p in productions:
            grammar.setProductions(p['String'])

        grammarExtended = grammar.evaluateString(string)
        msg = f"{grammarExtended}"
        return msg
Exemple #2
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')
Exemple #3
0
from Grammar import Grammar
sys.path.append('./IntermiddleClass')
from intermiddleClass import IntermiddleClass

grammar = Grammar("grammar1")
iClass = IntermiddleClass()

grammar.setNonTerminals("A")
grammar.setNonTerminals("B")
grammar.setNonTerminals("S")

grammar.setTerminals("a")
grammar.setTerminals("b")
grammar.setTerminals("0")
grammar.setTerminals("1")
grammar.setTerminals("s")
grammar.setTerminals("m")

grammar.setInitialNT("S")

grammar.setProductions("S>a A")
grammar.setProductions("S>b B")
grammar.setProductions("A>A 0")
grammar.setProductions("A>A 1")
grammar.setProductions("A>0")
grammar.setProductions("B>B s")
grammar.setProductions("B>m")

# print(grammar.getTransformedGrammar("grammar1"))
print(grammar.evaluateString("a0010"))
print(iClass.transformAFD(grammar, 'a0010'))
Exemple #4
0
grammar.setNonTerminals("H")
grammar.setNonTerminals("I")

grammar.setTerminals("c")
grammar.setTerminals("v")

grammar.setInitialNT("A")

grammar.setProductions("A>c B | A>v G")
# grammar.setProductions("A>v G")
grammar.setProductions("B>c C | B>v D | B>epsilon")
# grammar.setProductions("B>v D")
# grammar.setProductions("B>epsilon")
grammar.setProductions("C>v G | C>c B")
# grammar.setProductions("C>c B")
grammar.setProductions("D>v E | D>c C | D>epsilon")
# grammar.setProductions("D>c C")
# grammar.setProductions("D>epsilon")
grammar.setProductions("E>v F | E>c C | E>epsilon")
# grammar.setProductions("E>c C")
# grammar.setProductions("E>epsilon")
grammar.setProductions("F>epsilon | F>c C")
# grammar.setProductions("F>c C")
grammar.setProductions("G>v H | G>c B")
# grammar.setProductions("G>c B")
grammar.setProductions("H>v I | H>c B")
# grammar.setProductions("H>c B")
grammar.setProductions("I>c B")

print(grammar.evaluateString("vvvcvvvcvc"))
Exemple #5
0
import sys
sys.path.append('./IntermiddleClass')
from intermiddleClass import IntermiddleClass
from Grammar import Grammar

grammar = Grammar("gram2")
iClass = IntermiddleClass()

grammar.setNonTerminals("A")
grammar.setNonTerminals("B")

grammar.setTerminals("1")
grammar.setTerminals("0")

grammar.setInitialNT("A")

grammar.setProductions("A>0 B | A>1 A | A>epsilon")
grammar.setProductions("B>0 B | B>1 A")

# if (grammar.onlyEvaluate('0101')):
#     print("Cadena válida")
# else:
#     print("Cadena invalida")

print(grammar.evaluateString("0101"))

# print(iClass.transformAFD(grammar, '0101'))