def convert_FSA(Grammar): grammar_state = {} grammar_terminal = {} automata = {} alphadict = dict((i + 1, x) for i, x in enumerate(string.ascii_lowercase)) alphadict[0] = '%' count = 0 for terms in Grammar.terminals: grammar_terminal[terms] = count count += 1 count = 0 transition = {} print Grammar.dict_grammar for states in Grammar.dict_grammar: grammar_state[states] = count count += 1 grammar_state['%'] = count #print grammar_state #print grammar_terminal for num in range(Grammar.num_terminals + 1): transition[alphadict[num]] = [] #print transition for states in Grammar.dict_grammar: automata[grammar_state[states]] = copy.copy(transition) for rule in Grammar.dict_grammar[states]: length = len(rule) if rule == '%': automata[grammar_state[states]][alphadict[ grammar_state[states]]] = grammar_state['%'] elif length == 2 and Grammar_Functions.num_terminal(Grammar, rule) < 2: #print 'initial state is ',[grammar_state[states]],'transition is',alphadict[grammar_terminal[rule[0]]+1],'final state is ',grammar_state[rule[1]] automata[grammar_state[states]][alphadict[ grammar_terminal[rule[0]] + 1]] = grammar_state[rule[1]] elif length == 1: #print 'initial state is ',[grammar_state[states]],'transition is',alphadict[grammar_terminal[rule[0]]+1],'final state is ',grammar_state['%'] automata[grammar_state[states]][alphadict[ grammar_terminal[rule[0]] + 1]] = grammar_state['%'] elif length == Grammar_Functions.num_terminal(Grammar, rule): automata[grammar_state[states]][rule] = grammar_state['%'] else: automata[grammar_state[states]][ rule[:length - 2]] = grammar_state[rule[length - 1]] return automata
def identify_leftrecur(Grammar): dict_recursion = {} for node in Grammar.dict_grammar: print node variables = Grammar.states + Grammar.terminals flag = False list_var = Grammar_Functions.leftmost_variable( Grammar, Grammar.dict_grammar[node]) print list_var list_var_copy = copy.copy(list_var) reachable = set() while (len(list_var_copy) != 0): var = list_var_copy.pop() try: variables.remove(var) if Grammar_Functions.isState(Grammar, var) == True: reachable.add(var) list_var_copy.extend( Grammar_Functions.leftmost_variable( Grammar, Grammar.dict_grammar[var])) except: pass print reachable if node in reachable: flag = True dict_recursion[node] = flag return dict_recursion
def identify_leftrecur(Grammar): dict_recursion = {} for node in Grammar.dict_grammar: print node variables = Grammar.states + Grammar.terminals flag = False list_var = Grammar_Functions.leftmost_variable(Grammar, Grammar.dict_grammar[node]) print list_var list_var_copy = copy.copy(list_var) reachable = set() while(len(list_var_copy)!=0): var = list_var_copy.pop() try: variables.remove(var) if Grammar_Functions.isState(Grammar,var) == True: reachable.add(var) list_var_copy.extend(Grammar_Functions.leftmost_variable(Grammar, Grammar.dict_grammar[var])) except: pass print reachable if node in reachable: flag = True dict_recursion[node] = flag return dict_recursion
def convert_FSA(Grammar): grammar_state = {} grammar_terminal = {} automata = {} alphadict = dict((i+1,x) for i, x in enumerate(string.ascii_lowercase)) alphadict[0] = '%' count = 0 for terms in Grammar.terminals: grammar_terminal[terms] = count count += 1 count = 0 transition = {} print Grammar.dict_grammar for states in Grammar.dict_grammar: grammar_state[states] = count count += 1 grammar_state['%'] = count #print grammar_state #print grammar_terminal for num in range(Grammar.num_terminals+1): transition[alphadict[num]] = [] #print transition for states in Grammar.dict_grammar: automata[grammar_state[states]] = copy.copy(transition) for rule in Grammar.dict_grammar[states]: length = len(rule) if rule == '%': automata[grammar_state[states]][alphadict[grammar_state[states]]] = grammar_state['%'] elif length == 2 and Grammar_Functions.num_terminal(Grammar, rule) < 2: #print 'initial state is ',[grammar_state[states]],'transition is',alphadict[grammar_terminal[rule[0]]+1],'final state is ',grammar_state[rule[1]] automata[grammar_state[states]][alphadict[grammar_terminal[rule[0]]+1]] = grammar_state[rule[1]] elif length == 1: #print 'initial state is ',[grammar_state[states]],'transition is',alphadict[grammar_terminal[rule[0]]+1],'final state is ',grammar_state['%'] automata[grammar_state[states]][alphadict[grammar_terminal[rule[0]]+1]] = grammar_state['%'] elif length == Grammar_Functions.num_terminal(Grammar, rule): automata[grammar_state[states]][rule] = grammar_state['%'] else: automata[grammar_state[states]][rule[:length-2]] = grammar_state[rule[length-1]] return automata
def reach_grammar(Grammar, state): return Grammar_Functions.reach_Grammar(Grammar, state)
def reach_grammar(Grammar,state): return Grammar_Functions.reach_Grammar(Grammar, state)