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
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')
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'))
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"))
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'))