def find_follow(grammar): follow_not_found_dictionary = {} grammar_dictionary = {} list_of_symbols_in_order = [] for eachGrammarProduction in grammar: #removing extra spaces and new line character eachGrammarProduction = eachGrammarProduction.split("->") eachGrammarProduction[0] = eachGrammarProduction[0].replace(" ", "") eachGrammarProduction[0] = eachGrammarProduction[0].replace("\n", "") eachGrammarProduction[1] = eachGrammarProduction[1].replace(" ", "") eachGrammarProduction[1] = eachGrammarProduction[1].replace("\n", "") if not (eachGrammarProduction[0] in list_of_symbols_in_order): list_of_symbols_in_order.append(eachGrammarProduction[0]) #if the same grammar has more than one production then add it to a list if (grammar_dictionary.has_key(eachGrammarProduction[0])): grammar_dictionary[eachGrammarProduction[0]].append( eachGrammarProduction[1]) else: grammar_dictionary[eachGrammarProduction[0]] = [ eachGrammarProduction[1] ] follow_dictionary = {} first = find_first(grammar_dictionary) start_symbol = list_of_symbols_in_order[0] follow_dictionary[start_symbol] = ['$'] for everySymbol in list_of_symbols_in_order[1:]: follow_dictionary[everySymbol] = [] for everySymbol in list_of_symbols_in_order: productions_found = find_productions(grammar_dictionary, everySymbol) process_productions_found(productions_found, first, follow_dictionary, follow_not_found_dictionary, everySymbol) for everySymbol in follow_not_found_dictionary.keys(): if len(follow_not_found_dictionary[everySymbol]) != 0: for NonTerminal in follow_not_found_dictionary[everySymbol]: for eachTerminal in follow_dictionary[NonTerminal]: if eachTerminal not in follow_dictionary[everySymbol]: follow_dictionary[everySymbol].append(eachTerminal) return follow_dictionary
def find_follow(grammar): follow_not_found_dictionary ={} grammar_dictionary = {} list_of_symbols_in_order = [] for eachGrammarProduction in grammar: #removing extra spaces and new line character eachGrammarProduction = eachGrammarProduction.split("->") eachGrammarProduction[0] = eachGrammarProduction[0].replace(" ","") eachGrammarProduction[0] = eachGrammarProduction[0].replace("\n","") eachGrammarProduction[1] = eachGrammarProduction[1].replace(" ","") eachGrammarProduction[1] = eachGrammarProduction[1].replace("\n","") if not(eachGrammarProduction[0] in list_of_symbols_in_order): list_of_symbols_in_order.append(eachGrammarProduction[0]) #if the same grammar has more than one production then add it to a list if(grammar_dictionary.has_key(eachGrammarProduction[0])): grammar_dictionary[eachGrammarProduction[0]].append(eachGrammarProduction[1]) else: grammar_dictionary[eachGrammarProduction[0]] = [eachGrammarProduction[1]] follow_dictionary = {} first = find_first(grammar_dictionary) start_symbol = list_of_symbols_in_order[0] follow_dictionary[start_symbol] = ['$'] for everySymbol in list_of_symbols_in_order[1:]: follow_dictionary[everySymbol] =[] for everySymbol in list_of_symbols_in_order: productions_found = find_productions(grammar_dictionary,everySymbol) process_productions_found(productions_found,first,follow_dictionary,follow_not_found_dictionary,everySymbol) for everySymbol in follow_not_found_dictionary.keys(): if len(follow_not_found_dictionary[everySymbol]) != 0: for NonTerminal in follow_not_found_dictionary[everySymbol]: for eachTerminal in follow_dictionary[NonTerminal]: if eachTerminal not in follow_dictionary[everySymbol]: follow_dictionary[everySymbol].append(eachTerminal) return follow_dictionary
def find_follow(grammar): follow_not_found_dictionary = {} grammar_dictionary = {} list_of_symbols_in_order = [] for eachGrammarProduction in grammar: eachGrammarProduction = eachGrammarProduction.split("->") eachGrammarProduction[0] = eachGrammarProduction[0].replace(" ", "") eachGrammarProduction[0] = eachGrammarProduction[0].replace("\n", "") eachGrammarProduction[1] = eachGrammarProduction[1].replace(" ", "") eachGrammarProduction[1] = eachGrammarProduction[1].replace("\n", "") if not (eachGrammarProduction[0] in list_of_symbols_in_order): list_of_symbols_in_order.append(eachGrammarProduction[0]) if (eachGrammarProduction[0] in grammar_dictionary): grammar_dictionary[eachGrammarProduction[0]].append( eachGrammarProduction[1]) else: grammar_dictionary[eachGrammarProduction[0]] = [ eachGrammarProduction[1] ] follow_dictionary = {} first = find_first(grammar_dictionary) start_symbol = list_of_symbols_in_order[0] follow_dictionary[start_symbol] = ['$'] for everySymbol in list_of_symbols_in_order[1:]: follow_dictionary[everySymbol] = [] for everySymbol in list_of_symbols_in_order: productions_found = find_productions(grammar_dictionary, everySymbol) process_productions_found(productions_found, first, follow_dictionary, follow_not_found_dictionary, everySymbol) for everySymbol in follow_not_found_dictionary: if len(follow_not_found_dictionary[everySymbol]) != 0: for NonTerminal in follow_not_found_dictionary[everySymbol]: for eachTerminal in follow_dictionary[NonTerminal]: if eachTerminal not in follow_dictionary[everySymbol]: follow_dictionary[everySymbol].append(eachTerminal) return follow_dictionary
def getFirst(self): #print "first is called" self.textBrowser_3 = QtGui.QTextBrowser(self.centralwidget) self.textBrowser_3.setObjectName(_fromUtf8("textBrowser_3")) self.gridLayout_3.addWidget(self.textBrowser_3, 1, 0, 1, 2) first = [] if len(self.grammar_list) == 0: self.showWarningMsg() else: grammar = {} for eachElement in self.grammar_list: eachElement = eachElement.replace(" ","") production = eachElement.split("->") if grammar.has_key(production[0]): grammar[production[0]].append(production[1]) else: grammar[production[0]] = [production[1]] #print grammar first = find_first(grammar) #print first self.showFirst(first)