示例#1
0
    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
示例#2
0
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