Grammalecte  Check-in [c6b8ff879e]

Overview
Comment:[build] move code about DARGs in darg.py
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | build | rg
Files: files | file ages | folders
SHA3-256: c6b8ff879e8cd12f8b9dec8e6e67e70849d4261cb0f9953936ca8cc09e7bebf9
User & Date: olr on 2018-06-26 04:44:17
Other Links: branch diff | manifest | tags
Context
2018-06-26
06:23
[fr] conversion: regex rules -> graph rules check-in: f576d56463 user: olr tags: fr, rg
04:44
[build] move code about DARGs in darg.py check-in: c6b8ff879e user: olr tags: build, rg
04:42
[fr] erreurs de frappe check-in: 9ecb48dd7f user: olr tags: fr, rg
Changes

Modified compile_rules_graph.py from [9d41dade40] to [ad40703abe].

258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
258
259
260
261
262
263
264























265
266
267
268
269
270
271







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-







        dFUNCTIONS["_g_d_"+sActionId] = sAction
        sAction = "_g_d_"+sActionId
        return [sOption, sCondition, cAction, sAction]
    else:
        print("# Unknown action at line " + sActionId)
        return None


def rewriteKeysOfDARGs (dAllGraph):
    "keys of DARGs are long numbers (hash): this function replace these hashes with smaller numbers (to reduce storing)"
    dAllNewGraph = {}
    for sGraphName, dGraph in dAllGraph.items():
        # create translation dictionary
        dKeyTrans = {}
        for i, nKey in enumerate(dGraph):
            dKeyTrans[nKey] = i
        # replace keys
        dNewGraph = {}
        for nKey, dVal in dGraph.items():
            dNewGraph[dKeyTrans[nKey]] = dVal
        for nKey, dVal in dGraph.items():
            for sArc, val in dVal.items():
                if type(val) is int:
                    dVal[sArc] = dKeyTrans[val]
                else:
                    for sArc, nKey in val.items():
                        val[sArc] = dKeyTrans[nKey]
        dAllNewGraph[sGraphName] = dNewGraph
    return dAllNewGraph


def make (lRule, dDef, sLang, bJavaScript):
    "compile rules, returns a dictionary of values"
    # for clarity purpose, don’t create any file here

    # removing comments, zeroing empty lines, creating definitions, storing tests, merging rule lines
    print("  parsing rules...")
402
403
404
405
406
407
408
409

410
411
379
380
381
382
383
384
385

386
387
388







-
+


            print(sActionName, aAction)
        print("\nFunctions:")
        print(sPyCallables)

    # Result
    return {
        "graph_callables": sPyCallables,
        "rules_graphs": rewriteKeysOfDARGs(dAllGraph),
        "rules_graphs": dAllGraph,
        "rules_actions": dACTIONS
    }

Modified darg.py from [5a6ef5f70e] to [5064c8e027].

115
116
117
118
119
120
121

122
123


















124
125
126
127
128
129
130
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
143
144
145
146
147
148
149







+


+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







        for oNode in self.lMinimizedNodes:
            sHashId = oNode.__hash__()
            if sHashId not in dGraph:
                dGraph[sHashId] = oNode.getNodeAsDict()
            else:
                print("Error. Double node… same id: ", sHashId)
                print(str(oNode.getNodeAsDict()))
        dGraph = self._rewriteKeysOfDARG(dGraph)
        return dGraph

    def _rewriteKeysOfDARG (self, dGraph):
        "keys of DARG are long numbers (hashes): this function replace these hashes with smaller numbers (to reduce storing size)"
        # create translation dictionary
        dKeyTrans = {}
        for i, nKey in enumerate(dGraph):
            dKeyTrans[nKey] = i
        # replace keys
        dNewGraph = {}
        for nKey, dVal in dGraph.items():
            dNewGraph[dKeyTrans[nKey]] = dVal
        for nKey, dVal in dGraph.items():
            for sArc, val in dVal.items():
                if type(val) is int:
                    dVal[sArc] = dKeyTrans[val]
                else:
                    for sArc, nKey in val.items():
                        val[sArc] = dKeyTrans[nKey]
        return dNewGraph


class Node:
    """Node of the rule graph"""

    NextId = 0