WIP - fixing character classes

master
Aadhavan Srinivasan 1 week ago
parent 65e5b4e2af
commit 5a085907cf

@ -82,6 +82,7 @@ func shuntingYard(re string, flags ...ReFlag) ([]postfixNode, error) {
// Also check for non-capturing groups. The LPAREN of a non-capturing group looks like this: '(?:' // Also check for non-capturing groups. The LPAREN of a non-capturing group looks like this: '(?:'
// I take this out, and put in a special character - NONCAPLPAREN_CHAR. // I take this out, and put in a special character - NONCAPLPAREN_CHAR.
// //
// Another check is made for unescaped brackets - opening brackets are replaced with LBRACKET and closing brackets are replaced with RBRACKET.
// Finally, check for escaped backslashes. Replace these with the BACKSLASH metacharacter. Later, in thompson(), // Finally, check for escaped backslashes. Replace these with the BACKSLASH metacharacter. Later, in thompson(),
// these will be converted back. This avoids confusiuon in detecting whether a character is escaped eg. detecting // these will be converted back. This avoids confusiuon in detecting whether a character is escaped eg. detecting
// whether '\\[a]' has an escaped opening bracket (it doesn't). // whether '\\[a]' has an escaped opening bracket (it doesn't).
@ -122,6 +123,9 @@ func shuntingYard(re string, flags ...ReFlag) ([]postfixNode, error) {
} else if c == '\\' && i < len(re_runes_orig)-1 && re_runes_orig[i+1] == '\\' { // Escaped backslash } else if c == '\\' && i < len(re_runes_orig)-1 && re_runes_orig[i+1] == '\\' { // Escaped backslash
re_runes = append(re_runes, ESC_BACKSLASH) re_runes = append(re_runes, ESC_BACKSLASH)
i++ i++
} else if c == '[' && (i == 0 || re_runes_orig[i-1] != '\\')
} else { } else {
re_runes = append(re_runes, c) re_runes = append(re_runes, c)
} }

Loading…
Cancel
Save