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