Grammalecte  Check-in [e537d819dc]

Overview
Comment:[build] fix rules parser
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | build
Files: files | file ages | folders
SHA3-256: e537d819dcdc644f183b1d0818179e200997eb2caf67778f281d12490b78c8ea
User & Date: olr on 2018-10-26 18:12:05
Other Links: manifest | tags
Context
2018-10-26
18:12
[fr] faux positif: énumérations check-in: e8abf20a54 user: olr tags: trunk, fr
18:12
[build] fix rules parser check-in: e537d819dc user: olr tags: trunk, build
2018-10-24
09:49
[fr] faux positifs: énumération check-in: 9df50f20d9 user: olr tags: trunk, fr
Changes

Modified compile_rules_graph.py from [f9c246b8ef] to [eb2b3da492].

136
137
138
139
140
141
142
143

144
145
146
147
148
149
150
136
137
138
139
140
141
142

143
144
145
146
147
148
149
150







-
+







def createRule (iLine, sRuleName, sTokenLine, iActionBlock, sActions, nPriority, dOptPriority, dDef):
    "generator: create rule as list"
    # print(iLine, "//", sRuleName, "//", sTokenLine, "//", sActions, "//", nPriority)
    for lToken in genTokenLines(sTokenLine, dDef):
        # Calculate positions
        dPos = {}   # key: iGroup, value: iToken
        iGroup = 0
        #if iLine == 3971: # debug
        #if iLine == 15818: # debug
        #    print(" ".join(lToken))
        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)

165
166
167
168
169
170
171


172
173

174
175
176
177
178
179
180
165
166
167
168
169
170
171
172
173
174

175
176
177
178
179
180
181
182







+
+

-
+







                else:
                    print(" # Error on action at line:", iLine)
                    print(sTokenLine, "\n", sActions)


def changeReferenceToken (sText, dPos):
    "change group reference in <sText> with values in <dPos>"
    if "\\" not in sText:
        return sText
    for i in range(len(dPos), 0, -1):
        sText = sText.replace("\\"+str(i), "\\"+str(dPos[i]))
        sText = re.sub("\\\\"+str(i)+"(?![0-9])", "\\\\"+str(dPos[i]), sText)
    return sText


def checkTokenNumbers (sText, sActionId, nToken):
    "check if token references in <sText> greater than <nToken> (debugging)"
    for x in re.finditer(r"\\(\d+)", sText):
        if int(x.group(1)) > nToken: