Set 'isLazy' to true in the NFA, if the postfixNode has the flag set

master
Aadhavan Srinivasan 3 weeks ago
parent 9d6344719f
commit 3a2916baae

@ -945,6 +945,10 @@ func shuntingYard(re string, flags ...ReFlag) ([]postfixNode, error) {
}
outQueue[idx].startReps = startRangeNum
outQueue[idx].endReps = endRangeNum
if i < len(re_postfix)-1 && re_postfix[i+1] == '?' { // lazy repitition
outQueue[idx].isLazy = true
i++
}
}
if c == '(' || c == nonCapLparenRune {
opStack = append(opStack, c)
@ -1238,6 +1242,9 @@ func thompson(re []postfixNode) (Reg, error) {
if err != nil {
return Reg{}, err
}
if c.isLazy {
stateToAdd.isLazy = true
}
nfa = append(nfa, stateToAdd)
case plusNode: // a+ is equivalent to aa*
s1 := mustPop(&nfa)
@ -1245,6 +1252,9 @@ func thompson(re []postfixNode) (Reg, error) {
if err != nil {
return Reg{}, err
}
if c.isLazy {
s2.isLazy = true
}
s1 = concatenate(s1, s2)
nfa = append(nfa, s1)
case questionNode: // ab? is equivalent to a(b|)
@ -1256,6 +1266,9 @@ func thompson(re []postfixNode) (Reg, error) {
if err != nil {
return Reg{}, err
}
if c.isLazy {
s2.isLazy = true
}
nfa = append(nfa, s2)
case pipeNode:
// A pipe operator doesn't actually need either operand to be present. If an operand isn't present,
@ -1311,6 +1324,9 @@ func thompson(re []postfixNode) (Reg, error) {
if err != nil {
return Reg{}, err
}
if c.isLazy {
s2.isLazy = true
}
stateToAdd = concatenate(stateToAdd, s2)
} else { // Case 2
for i := c.startReps; i < c.endReps; i++ {
@ -1318,6 +1334,9 @@ func thompson(re []postfixNode) (Reg, error) {
if err != nil {
return Reg{}, fmt.Errorf("error processing bounded repetition")
}
if c.isLazy {
tmp.isLazy = true
}
stateToAdd = concatenate(stateToAdd, tmp)
}
}

Loading…
Cancel
Save