def OneVar_LHS(Grammar): LHS_Grammar = Grammar.dict_grammar.keys() for rule in LHS_Grammar: length = len(rule) if length != 1 or (len(rule)==1 and isState(Grammar,rule)==False): return False return True
def identifyUnit(Grammar): """ Identifies the dictionary of unit productions and returns this dictionary and number of unit productions """ Unit = {} for state in Grammar.dict_grammar: Unit[state] = set() if hasUnitProduction(Grammar.dict_grammar[state], Grammar) == True: for rule in Grammar.dict_grammar[state]: if len(rule) == 1 and isState(Grammar, rule): Unit[state].add(rule) return Unit
def identifyUnit(Grammar): """ Identifies the dictionary of unit productions and returns this dictionary and number of unit productions """ Unit = {} for state in Grammar.dict_grammar: Unit[state] = set() if hasUnitProduction(Grammar.dict_grammar[state],Grammar) == True: for rule in Grammar.dict_grammar[state]: if len(rule)==1 and isState(Grammar,rule): Unit[state].add(rule) return Unit
def isLeftLinear(Grammar): if OneVar_LHS(Grammar) == False: raise isNotRestricted(Grammar) for state in Grammar.dict_grammar: for rule in Grammar.dict_grammar[state]: if rule == '%': pass else: variable = containsStates(Grammar,rule) if variable == [] and len(rule)== num_terminal(Grammar,rule): pass elif len(variable) > 1 or isState(Grammar,rule[0]) == False: return [False,rule] return [True]