Index: compile_rules_graph.py ================================================================== --- compile_rules_graph.py +++ compile_rules_graph.py @@ -62,24 +62,24 @@ # Parse actions for nAction, sAction in enumerate(sActions.split(" <<- ")): if sAction.strip(): sActionId = sRuleName + "_a" + str(nAction) - sCondition, tAction = createAction(sActionId, sAction, nGroup, nPriority, dPos) - if tAction: - dACTIONS[sActionId] = tAction + aAction = createAction(sActionId, sAction, nGroup, nPriority, dPos) + if aAction: + dACTIONS[sActionId] = aAction lResult = list(lToken) - lResult.extend(["##"+str(iLine), sRuleName, sCondition, sActionId]) + lResult.extend(["##"+str(iLine), sActionId]) yield lResult def createAction (sIdAction, sAction, nGroup, nPriority, dPos): m = re.search("([-~=])(\\d+|)(:\\d+|)>> ", sAction) if not m: print(" # Error. No action found at: ", sIdAction) print(" ==", sAction, "==") - return None, None + return None # Condition sCondition = sAction[:m.start()].strip() if sCondition: sCondition = prepareFunction(sCondition) sCondition = changeReferenceToken(sCondition, dPos) @@ -149,33 +149,33 @@ sAction = "=gs_"+sIdAction elif sAction.startswith('"') and sAction.endswith('"'): sAction = sAction[1:-1] if not sMsg: print("# Error in action at line " + sIdAction + ": The message is empty.") - return [sCondition, (cAction, sAction, iStartAction, iEndAction, nPriority, sMsg, sURL)] + return [sCondition, cAction, sAction, iStartAction, iEndAction, nPriority, sMsg, sURL] elif cAction == "~": ## text processor if not sAction: print("# Error in action at line " + sIdAction + ": This action is empty.") if sAction[0:1] == "=": lFUNCTIONS.append(("gp_"+sIdAction, sAction[1:])) sAction = "=gp_"+sIdAction elif sAction.startswith('"') and sAction.endswith('"'): sAction = sAction[1:-1] - return [sCondition, (cAction, sAction, iStartAction, iEndAction)] + return [sCondition, cAction, sAction, iStartAction, iEndAction] elif cAction == "=": ## disambiguator if sAction[0:1] == "=": sAction = sAction[1:] if not sAction: print("# Error in action at line " + sIdAction + ": This action is empty.") lFUNCTIONS.append(("gd_"+sIdAction, sAction)) sAction = "gd_"+sIdAction - return [sCondition, (cAction, sAction)] + return [sCondition, cAction, sAction] elif cAction == ">": ## no action, break loop if condition is False - return [sCondition, (cAction, "")] + return [sCondition, cAction, ""] else: print("# Unknown action at line " + sIdAction) return None Index: datg.py ================================================================== --- datg.py +++ datg.py @@ -70,11 +70,11 @@ iToken = nCommonPrefix for token in aRule[nCommonPrefix:]: oNextNode = Node() oNode.dArcs[token] = oNextNode self.lUncheckedNodes.append((oNode, token, oNextNode)) - if iToken == (len(aRule) - 4): + if iToken == (len(aRule) - 2): oNode.bFinal = True iToken += 1 oNode = oNextNode oNode.bFinal = True self.aPreviousRule = aRule