コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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]       
コード例 #6
0
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]