Overview
Comment: | [build][core] gc engine update |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | core | build | rg |
Files: | files | file ages | folders |
SHA3-256: |
1d9246b16105c00694de326bff6d54a5 |
User & Date: | olr on 2018-06-03 13:51:56 |
Other Links: | branch diff | manifest | tags |
Context
2018-06-03
| ||
17:43 | [core] gc engine, text processor: remove useless commands, code clarification check-in: 6e4f6d12f0 user: olr tags: core, rg | |
13:51 | [build][core] gc engine update check-in: 1d9246b161 user: olr tags: core, build, rg | |
09:05 | [graphspell] default suggestions for French language check-in: fd12f98d29 user: olr tags: graphspell, rg | |
Changes
Modified compile_rules_graph.py from [e2184e369e] to [0bf3596a1c].
︙ | ︙ | |||
37 38 39 40 41 42 43 | s = re.sub(r"isNextNotCOD\(\s*\)", 'isNextNotCOD(dDA, s[m.end():], m.end())', s) # isNextNotCOD(s) s = re.sub(r"isNextVerb\(\s*\)", 'isNextVerb(dDA, s[m.end():], m.end())', s) # isNextVerb(s) s = re.sub(r"\bspell *[(]", '_oSpellChecker.isValid(', s) s = re.sub(r"[\\](\d+)", 'lToken[\\1]', s) return s | < < < < | | < | | | | | | | | | | | | | | | > > > > > > | | | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | s = re.sub(r"isNextNotCOD\(\s*\)", 'isNextNotCOD(dDA, s[m.end():], m.end())', s) # isNextNotCOD(s) s = re.sub(r"isNextVerb\(\s*\)", 'isNextVerb(dDA, s[m.end():], m.end())', s) # isNextVerb(s) s = re.sub(r"\bspell *[(]", '_oSpellChecker.isValid(', s) s = re.sub(r"[\\](\d+)", 'lToken[\\1]', s) return s def genTokenLines (sTokenLine): "tokenize a string and return a list of lines of tokens" lToken = sTokenLine.split() lTokenLines = None for i, sToken in enumerate(lToken): if sToken.startswith("{") and sToken.endswith("}") and sToken in dDEF: lToken[i] = dDEF[sToken] if ( (sToken.startswith("[") and sToken.endswith("]")) or (sToken.startswith("([") and sToken.endswith("])")) ): bSelectedGroup = sToken.startswith("(") and sToken.endswith(")") if bSelectedGroup: sToken = sToken[1:-1] # multiple token if not lTokenLines: lTokenLines = [ [s] for s in sToken[1:-1].split("|") ] else: lNewTemp = [] for aRule in lTokenLines: lElem = sToken[1:-1].split("|") sElem1 = lElem.pop(0) if bSelectedGroup: sElem1 = "(" + sElem1 + ")" for sElem in lElem: if bSelectedGroup: sElem = "(" + sElem + ")" aNew = list(aRule) aNew.append(sElem) lNewTemp.append(aNew) aRule.append(sElem1) lTokenLines.extend(lNewTemp) else: # simple token if not lTokenLines: lTokenLines = [[sToken]] else: for aRule in lTokenLines: aRule.append(sToken) for aRule in lTokenLines: yield aRule def createRule (iLine, sRuleName, sTokenLine, sActions, nPriority): # print(iLine, "//", sRuleName, "//", sTokenLine, "//", sActions, "//", nPriority) for lToken in genTokenLines(sTokenLine): # Calculate positions dPos = {} # key: iGroup, value: iToken iGroup = 0 for i, sToken in enumerate(lToken): if sToken.startswith("(") and sToken.endswith(")"): lToken[i] = sToken[1:-1] iGroup += 1 dPos[iGroup] = i + 1 # we add 1, for we count tokens from 1 to n (not from 0) # Parse actions for nAction, sAction in enumerate(sActions.split(" <<- ")): if sAction.strip(): sActionId = sRuleName + "_a" + str(nAction) aAction = createAction(sActionId, sAction, nPriority, len(lToken), dPos) if aAction: dACTIONS[sActionId] = aAction lResult = list(lToken) lResult.extend(["##"+str(iLine), sActionId]) yield lResult def changeReferenceToken (s, dPos): for i in range(len(dPos), 0, -1): s = s.replace("\\"+str(i), "\\"+str(dPos[i])) return s def createAction (sIdAction, sAction, nPriority, nToken, dPos): m = re.search("([-~=])(\\d+|)(:\\d+|)>> ", sAction) if not m: print(" # Error. No action found at: ", sIdAction) print(" ==", sAction, "==") return None # Condition sCondition = sAction[:m.start()].strip() if sCondition: sCondition = prepareFunction(sCondition) sCondition = changeReferenceToken(sCondition, dPos) lFUNCTIONS.append(("g_c_"+sIdAction, sCondition)) sCondition = "g_c_"+sIdAction else: sCondition = "" # Action cAction = m.group(1) sAction = sAction[m.end():].strip() sAction = changeReferenceToken(sAction, dPos) iStartAction = int(m.group(2)) if m.group(2) else 0 iEndAction = int(m.group(3)[1:]) if m.group(3) else iStartAction if dPos: try: iStartAction = dPos[iStartAction] iEndAction = dPos[iEndAction] except: print("# Error. Wrong groups in: " + sIdAction) if cAction == "-": |
︙ | ︙ | |||
153 154 155 156 157 158 159 | if mURL: sURL = mURL.group(1).strip() sMsg = sMsg[:mURL.start(0)].strip() if sMsg[0:1] == "=": sMsg = prepareFunction(sMsg[1:]) lFUNCTIONS.append(("g_m_"+sIdAction, sMsg)) for x in re.finditer("group[(](\\d+)[)]", sMsg): | | | | | | | | | | 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | if mURL: sURL = mURL.group(1).strip() sMsg = sMsg[:mURL.start(0)].strip() if sMsg[0:1] == "=": sMsg = prepareFunction(sMsg[1:]) lFUNCTIONS.append(("g_m_"+sIdAction, sMsg)) for x in re.finditer("group[(](\\d+)[)]", sMsg): if int(x.group(1)) > nToken: print("# Error in token index in message at line " + sIdAction + " ("+str(nToken)+" tokens only)") sMsg = "=g_m_"+sIdAction else: for x in re.finditer(r"\\(\d+)", sMsg): if int(x.group(1)) > nToken: print("# Error in token index in message at line " + sIdAction + " ("+str(nToken)+" tokens only)") if re.search("[.]\\w+[(]", sMsg): print("# Error in message at line " + sIdAction + ": This message looks like code. Line should begin with =") if sAction[0:1] == "=" or cAction == "=": if "define" in sAction and not re.search(r"define\(\\\d+ *, *\[.*\] *\)", sAction): print("# Error in action at line " + sIdAction + ": second argument for define must be a list of strings") sAction = prepareFunction(sAction) for x in re.finditer("group[(](\\d+)[)]", sAction): if int(x.group(1)) > nToken: print("# Error in token index in replacement at line " + sIdAction + " ("+str(nToken)+" tokens only)") else: for x in re.finditer(r"\\(\d+)", sAction): if int(x.group(1)) > nToken: print("# Error in token index in replacement at line " + sIdAction + " ("+str(nToken)+" tokens only)") if re.search("[.]\\w+[(]|sugg\\w+[(]", sAction): print("# Error in action at line " + sIdAction + ": This action looks like code. Line should begin with =") if cAction == "-": ## error detected --> suggestion if not sAction: print("# Error in action at line " + sIdAction + ": This action is empty.") |
︙ | ︙ | |||
330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 | continue sPyCallables += "def {} ({}):\n".format(sFuncName, sParams) sPyCallables += " return " + sReturn + "\n" #sJSCallables += " {}: function ({})".format(sFuncName, sParams) + " {\n" #sJSCallables += " return " + jsconv.py2js(sReturn) + ";\n" #sJSCallables += " },\n" #sJSCallables += "}\n" # Result d = { "graph_callables": sPyCallables, "graph_gctests": sGCTests, "rules_graph": oRuleGraph, "rules_actions": dACTIONS } return d | > > > | 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 | continue sPyCallables += "def {} ({}):\n".format(sFuncName, sParams) sPyCallables += " return " + sReturn + "\n" #sJSCallables += " {}: function ({})".format(sFuncName, sParams) + " {\n" #sJSCallables += " return " + jsconv.py2js(sReturn) + ";\n" #sJSCallables += " },\n" #sJSCallables += "}\n" for sActionName, aAction in dACTIONS.items(): print(sActionName, aAction) # Result d = { "graph_callables": sPyCallables, "graph_gctests": sGCTests, "rules_graph": oRuleGraph, "rules_actions": dACTIONS } return d |
Modified gc_core/py/lang_core/gc_engine.py from [d669c0fe4f] to [dc1fba7ea9].
︙ | ︙ | |||
728 729 730 731 732 733 734 | lPointer.extend(lNewPointer) # check arcs of first nodes for dNode in self._getNextMatchingNodes(dToken, dGraph[0]): lPointer.append({"nOffset": dToken["i"], "dNode": dNode}) # check if there is rules to check for each pointer for dPointer in lPointer: if "<rules>" in dPointer["dNode"]: | | | 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 | lPointer.extend(lNewPointer) # check arcs of first nodes for dNode in self._getNextMatchingNodes(dToken, dGraph[0]): lPointer.append({"nOffset": dToken["i"], "dNode": dNode}) # check if there is rules to check for each pointer for dPointer in lPointer: if "<rules>" in dPointer["dNode"]: bHasChanged, errs = self._executeActions(dPointer["dNode"]["<rules>"], dPointer["nOffset"]-1, dPriority, dOpt, bShowRuleId, bContext) dErr.update(errs) if bHasChanged: bChange = True if dErr: print(dErr) return (bChange, dErr) |
︙ | ︙ |