def goto(self, grammar, symbol): new_grammar = Context_Free_Grammar() for LHS in grammar.production: for production in grammar.production[LHS]: index = production.index('.') + 1 if index < len(production) and production[index] == symbol: index += 1 if index < len(production) and production[ index] in self.augmented_grammar.non_terminal: new_grammar = self.track(grammar, new_grammar, production[index]) new_production = deepcopy(production) new_production.insert( new_production.index('.') + 1, new_production.pop(new_production.index('.'))) new_grammar.add_production_rule(LHS, new_production) for a_symbol in list(set([LHS] + production)): new_grammar = self.set_symbol(new_grammar, a_symbol) return new_grammar
def goto(self, grammar, symbol): new_grammar = Context_Free_Grammar() for LHS in grammar.production: for production in grammar.production[LHS]: index = production.index('.') + 1 if index < len(production) and production[index] == symbol: index += 1 if index < len(production) and production[index] in self.augmented_grammar.non_terminal: new_grammar = self.track(grammar, new_grammar, production[index]) new_production = deepcopy(production) new_production.insert(new_production.index('.') + 1, new_production.pop(new_production.index('.'))) new_grammar.add_production_rule(LHS, new_production) for a_symbol in list(set([LHS] + production)): new_grammar = self.set_symbol(new_grammar, a_symbol) return new_grammar
def Grammar(): grammar = Context_Free_Grammar() grammar.add_terminal("a", "b", "c", "~", ":", "author", "title") grammar.add_non_terminal("Text", "Effect", "Alpha") grammar.set_start_symbol("Text") grammar.add_production_rule("Text", ["~", "Effect", ":", "Text", "~"], ["Alpha"]) grammar.add_production_rule("Effect", ["author"], ["title"]) grammar.add_production_rule("Alpha", ["a"], ["b"]) # grammar.add_production_rule('F', ['(', 'E', ')'], ['id']) return grammar
def Grammar(): grammar = Context_Free_Grammar() grammar.add_terminal('+', '*', '(', ')', 'id') grammar.add_non_terminal('E', 'T', 'F') grammar.set_start_symbol('E') grammar.add_production_rule('E', ['E', '+', 'T'], ['T']) grammar.add_production_rule('T', ['T', '*', 'F'], ['F']) grammar.add_production_rule('F', ['(', 'E', ')'], ['id']) return grammar
def Grammar(): grammar = Context_Free_Grammar() grammar.add_terminal('a', 'b', 'c', '~', ':', 'author', 'title') grammar.add_non_terminal('Text', 'Effect', 'Alpha') grammar.set_start_symbol('Text') grammar.add_production_rule('Text', ['~', 'Effect', ':', 'Text', '~'], ['Alpha']) grammar.add_production_rule('Effect', ['author'], ['title']) grammar.add_production_rule('Alpha', ['a'], ['b']) #grammar.add_production_rule('F', ['(', 'E', ')'], ['id']) return grammar