Grammalecte  Check-in [05df35c320]

Overview
Comment:[core] gc engine: use pointer as paramater instead of several values from pointer
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | core | rg
Files: files | file ages | folders
SHA3-256: 05df35c3205d2118a82390745ecd4ed3eb06fc8d16f07d8bfb0bde2b7a05b19d
User & Date: olr on 2018-07-31 12:27:17
Other Links: branch diff | manifest | tags
Context
2018-07-31
12:30
[fr] 1re règle avec un token vide check-in: 99292c2f0f user: olr tags: fr, rg
12:27
[core] gc engine: use pointer as paramater instead of several values from pointer check-in: 05df35c320 user: olr tags: core, rg
09:57
[core] gc engine: jump action to keep pointers until token found check-in: 043d1fdd77 user: olr tags: core, rg
Changes

Modified gc_core/py/lang_core/gc_engine.py from [e0f46ccafe] to [d7a26cb2a4].

601
602
603
604
605
606
607
608

609


610
611
612
613
614
615
616
601
602
603
604
605
606
607

608
609
610
611
612
613
614
615
616
617
618







-
+

+
+







                dToken["lMorph"] = self.dTokenPos[dToken["nStart"]]["lMorph"]
        self.lToken = lNewToken
        self.dTokenPos = { dToken["nStart"]: dToken  for dToken in self.lToken  if dToken["sType"] != "INFO" }
        if bDebug:
            print("UPDATE:")
            print(self)

    def _getNextPointers (self, dToken, dGraph, iNode1, dNode, bKeep=False, bDebug=False):
    def _getNextPointers (self, dToken, dGraph, dPointer, bDebug=False):
        "generator: return nodes where <dToken> “values” match <dNode> arcs"
        dNode = dPointer["dNode"]
        iNode1 = dPointer["iNode1"]
        bTokenFound = False
        # token value
        if dToken["sValue"] in dNode:
            if bDebug:
                print("  MATCH:", dToken["sValue"])
            yield { "iNode1": iNode1, "dNode": dGraph[dNode[dToken["sValue"]]] }
            bTokenFound = True
720
721
722
723
724
725
726
727
728


729
730
731

732

733
734
735
736
737
738
739
740
741
742
743
744
745
746

747
748
749

750
751
752
753
754
755
756
722
723
724
725
726
727
728


729
730
731
732
733
734

735
736
737
738
739
740
741
742
743
744
745
746
747
748

749
750
751

752
753
754
755
756
757
758
759







-
-
+
+



+
-
+













-
+


-
+







                        yield { "iNode1": iNode1, "dNode": dGraph[dNode["<meta>"][sMeta]] }
                        bTokenFound = True
                elif dToken["sType"] in sMeta:
                    if bDebug:
                        print("  MATCH: *" + sMeta)
                    yield { "iNode1": iNode1, "dNode": dGraph[dNode["<meta>"][sMeta]] }
                    bTokenFound = True
        if bKeep and not bTokenFound:
            yield { "iNode1": iNode1, "dNode": dNode, "bKeep": True }
        if "bKeep" in dPointer and not bTokenFound:
            yield dPointer
        # JUMP
        # Warning! Recurssion!
        if "<>" in dNode:
            dPointer2 = { "iNode1": iNode1, "dNode": dGraph[dNode["<>"]], "bKeep": True }
            yield from self._getNextPointers(self, dToken, dGraph, iNode1, dGraph[dNode["<>"]], True, bDebug)
            yield from self._getNextPointers(dToken, dGraph, dPointer2, bDebug)


    def parse (self, dGraph, dPriority, sCountry="${country_default}", dOptions=None, bShowRuleId=False, bDebug=False, bContext=False):
        "parse tokens from the text and execute actions encountered"
        dOpt = _dOptions  if not dOptions  else dOptions
        lPointer = []
        bTagAndRewrite = False
        for iToken, dToken in enumerate(self.lToken):
            if bDebug:
                print("TOKEN:", dToken["sValue"])
            # check arcs for each existing pointer
            lNextPointer = []
            for dPointer in lPointer:
                lNextPointer.extend(self._getNextPointers(dToken, dGraph, dPointer["iNode1"], dPointer["dNode"], dPointer.get("bKeep", False), bDebug))
                lNextPointer.extend(self._getNextPointers(dToken, dGraph, dPointer, bDebug))
            lPointer = lNextPointer
            # check arcs of first nodes
            lPointer.extend(self._getNextPointers(dToken, dGraph, iToken, dGraph[0], False, bDebug))
            lPointer.extend(self._getNextPointers(dToken, dGraph, { "iNode1": iToken, "dNode": dGraph[0] }, bDebug))
            # check if there is rules to check for each pointer
            for dPointer in lPointer:
                #if bDebug:
                #    print("+", dPointer)
                if "<rules>" in dPointer["dNode"]:
                    bChange = self._executeActions(dGraph, dPointer["dNode"]["<rules>"], dPointer["iNode1"]-1, iToken, dPriority, dOpt, sCountry, bShowRuleId, bDebug, bContext)
                    if bChange: