Files
codeql/cpp/ql/test/library-tests/regex/parse.expected
copilot-swe-agent[bot] 8d53e365d6 Commit 5: Port missing POSIX-bracket parse cases from PR #22200
Add corpus cases: bare [:alpha:], mid-pattern a[🅱️]c, POSIX class as
range endpoint [[:alpha:]-z], malformed [[:alpha], leading literal ]
combined with a POSIX class []a[:alpha:]], three POSIX classes in one
class, additional names [[:xdigit:]] / [[:blank:]] / [[:cntrl:]] /
[[:graph:]], and the integration case combining all of the above.

The regenerated parse.expected reveals genuine mis-parses that this
commit deliberately records (fixes in Commit 6):
- unnested [:alpha:] and [🅱️] are treated as RegExpNamedCharacterProperty
  even though POSIX brackets are only valid inside a character class,
- [[:alpha:]-z] emits a spurious [RegExpCharacterRange] ":]-z" instead
  of a POSIX class + literal '-' + 'z'.

Bundle: github/codeql-action codeql-bundle-v2.26.1 (CodeQL CLI 2.26.1).
2026-07-21 12:21:45 +00:00

782 lines
21 KiB
Plaintext

test.cpp:
# 33| [RegExpConstant, RegExpNormalChar] abc
# 36| [RegExpConstant, RegExpNormalChar] a
# 36| [RegExpStar] a*
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 36| [RegExpSequence] a*b+c?d
#-----| 0 -> [RegExpStar] a*
#-----| 1 -> [RegExpPlus] b+
#-----| 2 -> [RegExpOpt] c?
#-----| 3 -> [RegExpConstant, RegExpNormalChar] d
# 36| [RegExpConstant, RegExpNormalChar] b
# 36| [RegExpPlus] b+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] b
# 36| [RegExpConstant, RegExpNormalChar] c
# 36| [RegExpOpt] c?
#-----| 0 -> [RegExpConstant, RegExpNormalChar] c
# 36| [RegExpConstant, RegExpNormalChar] d
# 37| [RegExpConstant, RegExpNormalChar] a
# 37| [RegExpRange] a{4,8}
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 39| [RegExpConstant, RegExpNormalChar] a
# 39| [InfiniteRepetitionQuantifier, RegExpRange] a{3,}
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 40| [RegExpConstant, RegExpNormalChar] a
# 40| [RegExpRange] a{7}
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 43| [RegExpConstant, RegExpNormalChar] foo
# 43| [RegExpAlt] foo|bar
#-----| 0 -> [RegExpConstant, RegExpNormalChar] foo
#-----| 1 -> [RegExpConstant, RegExpNormalChar] bar
# 43| [RegExpConstant, RegExpNormalChar] bar
# 46| [RegExpCharacterClass] [abc]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpNormalChar] b
#-----| 2 -> [RegExpConstant, RegExpNormalChar] c
# 46| [RegExpConstant, RegExpNormalChar] a
# 46| [RegExpConstant, RegExpNormalChar] b
# 46| [RegExpConstant, RegExpNormalChar] c
# 47| [RegExpCharacterClass] [a-fA-F0-9_]
#-----| 0 -> [RegExpCharacterRange] a-f
#-----| 1 -> [RegExpCharacterRange] A-F
#-----| 2 -> [RegExpCharacterRange] 0-9
#-----| 3 -> [RegExpConstant, RegExpNormalChar] _
# 47| [RegExpConstant, RegExpNormalChar] a
# 47| [RegExpCharacterRange] a-f
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpNormalChar] f
# 47| [RegExpConstant, RegExpNormalChar] f
# 47| [RegExpConstant, RegExpNormalChar] A
# 47| [RegExpCharacterRange] A-F
#-----| 0 -> [RegExpConstant, RegExpNormalChar] A
#-----| 1 -> [RegExpConstant, RegExpNormalChar] F
# 47| [RegExpConstant, RegExpNormalChar] F
# 47| [RegExpConstant, RegExpNormalChar] 0
# 47| [RegExpCharacterRange] 0-9
#-----| 0 -> [RegExpConstant, RegExpNormalChar] 0
#-----| 1 -> [RegExpConstant, RegExpNormalChar] 9
# 47| [RegExpConstant, RegExpNormalChar] 9
# 47| [RegExpConstant, RegExpNormalChar] _
# 49| [RegExpCaret] ^
# 49| [RegExpSequence] ^[+-]?\d+
#-----| 0 -> [RegExpCaret] ^
#-----| 1 -> [RegExpOpt] [+-]?
#-----| 2 -> [RegExpPlus] \d+
# 49| [RegExpCharacterClass] [+-]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] +
#-----| 1 -> [RegExpConstant, RegExpNormalChar] -
# 49| [RegExpOpt] [+-]?
#-----| 0 -> [RegExpCharacterClass] [+-]
# 49| [RegExpConstant, RegExpNormalChar] +
# 49| [RegExpConstant, RegExpNormalChar] -
# 49| [RegExpCharacterClassEscape] \d
# 49| [RegExpPlus] \d+
#-----| 0 -> [RegExpCharacterClassEscape] \d
# 50| [RegExpCharacterClass] [\w]
#-----| 0 -> [RegExpCharacterClassEscape] \w
# 50| [RegExpPlus] [\w]+
#-----| 0 -> [RegExpCharacterClass] [\w]
# 50| [RegExpCharacterClassEscape] \w
# 51| [RegExpConstant, RegExpEscape] \[
# 51| [RegExpSequence] \[\][123]
#-----| 0 -> [RegExpConstant, RegExpEscape] \[
#-----| 1 -> [RegExpConstant, RegExpEscape] \]
#-----| 2 -> [RegExpCharacterClass] [123]
# 51| [RegExpConstant, RegExpEscape] \]
# 51| [RegExpCharacterClass] [123]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] 1
#-----| 1 -> [RegExpConstant, RegExpNormalChar] 2
#-----| 2 -> [RegExpConstant, RegExpNormalChar] 3
# 51| [RegExpConstant, RegExpNormalChar] 1
# 51| [RegExpConstant, RegExpNormalChar] 2
# 51| [RegExpConstant, RegExpNormalChar] 3
# 52| [RegExpCharacterClass] [^A-Z]
#-----| 0 -> [RegExpCharacterRange] A-Z
# 52| [RegExpConstant, RegExpNormalChar] A
# 52| [RegExpCharacterRange] A-Z
#-----| 0 -> [RegExpConstant, RegExpNormalChar] A
#-----| 1 -> [RegExpConstant, RegExpNormalChar] Z
# 52| [RegExpConstant, RegExpNormalChar] Z
# 53| [RegExpCharacterClass] []]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] ]
# 53| [RegExpConstant, RegExpNormalChar] ]
# 54| [RegExpCharacterClass] [^]]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] ]
# 54| [RegExpConstant, RegExpNormalChar] ]
# 55| [RegExpCharacterClass] [^-]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] -
# 55| [RegExpConstant, RegExpNormalChar] -
# 56| [RegExpCharacterClass] [|]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] |
# 56| [RegExpConstant, RegExpNormalChar] |
# 59| [RegExpCharacterClass] [[a-f]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] [
#-----| 1 -> [RegExpCharacterRange] a-f
# 59| [RegExpSequence] [[a-f]A-F]
#-----| 0 -> [RegExpCharacterClass] [[a-f]
#-----| 1 -> [RegExpConstant, RegExpNormalChar] A-F]
# 59| [RegExpConstant, RegExpNormalChar] [
# 59| [RegExpConstant, RegExpNormalChar] a
# 59| [RegExpCharacterRange] a-f
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpNormalChar] f
# 59| [RegExpConstant, RegExpNormalChar] f
# 59| [RegExpConstant, RegExpNormalChar] A-F]
# 65| [RegExpCharacterClass] [[:alpha:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:]
# 65| [RegExpNamedCharacterProperty] [:alpha:]
# 66| [RegExpCharacterClass] [[:digit:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:digit:]
# 66| [RegExpNamedCharacterProperty] [:digit:]
# 67| [RegExpCharacterClass] [[:space:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:space:]
# 67| [RegExpNamedCharacterProperty] [:space:]
# 68| [RegExpCharacterClass] [[:upper:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:upper:]
# 68| [RegExpNamedCharacterProperty] [:upper:]
# 69| [RegExpCharacterClass] [[:lower:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:lower:]
# 69| [RegExpNamedCharacterProperty] [:lower:]
# 70| [RegExpCharacterClass] [[:alnum:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:alnum:]
# 70| [RegExpNamedCharacterProperty] [:alnum:]
# 71| [RegExpCharacterClass] [[:print:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:print:]
# 71| [RegExpNamedCharacterProperty] [:print:]
# 72| [RegExpCharacterClass] [[:punct:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:punct:]
# 72| [RegExpNamedCharacterProperty] [:punct:]
# 75| [RegExpCharacterClass] [^[:space:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:space:]
# 75| [RegExpNamedCharacterProperty] [:space:]
# 78| [RegExpCharacterClass] [a[:space:]]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpNamedCharacterProperty] [:space:]
# 78| [RegExpConstant, RegExpNormalChar] a
# 78| [RegExpNamedCharacterProperty] [:space:]
# 81| [RegExpCharacterClass] [[.a.]]
#-----| 0 -> [RegExpNamedCharacterProperty] [.a.]
# 81| [RegExpNamedCharacterProperty] [.a.]
# 84| [RegExpCharacterClass] [[=a=]]
#-----| 0 -> [RegExpNamedCharacterProperty] [=a=]
# 84| [RegExpNamedCharacterProperty] [=a=]
# 87| [RegExpCharacterClass] [[:alpha:]0-9]
#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:]
#-----| 1 -> [RegExpCharacterRange] 0-9
# 87| [RegExpNamedCharacterProperty] [:alpha:]
# 87| [RegExpConstant, RegExpNormalChar] 0
# 87| [RegExpCharacterRange] 0-9
#-----| 0 -> [RegExpConstant, RegExpNormalChar] 0
#-----| 1 -> [RegExpConstant, RegExpNormalChar] 9
# 87| [RegExpConstant, RegExpNormalChar] 9
# 90| [RegExpDot] .
# 90| [RegExpStar] .*
#-----| 0 -> [RegExpDot] .
# 91| [RegExpCharacterClassEscape] \w
# 91| [RegExpPlus] \w+
#-----| 0 -> [RegExpCharacterClassEscape] \w
# 91| [RegExpSequence] \w+\W
#-----| 0 -> [RegExpPlus] \w+
#-----| 1 -> [RegExpCharacterClassEscape] \W
# 91| [RegExpCharacterClassEscape] \W
# 92| [RegExpCharacterClassEscape] \s
# 92| [RegExpSequence] \s\S
#-----| 0 -> [RegExpCharacterClassEscape] \s
#-----| 1 -> [RegExpCharacterClassEscape] \S
# 92| [RegExpCharacterClassEscape] \S
# 93| [RegExpCharacterClassEscape] \d
# 93| [RegExpSequence] \d\D
#-----| 0 -> [RegExpCharacterClassEscape] \d
#-----| 1 -> [RegExpCharacterClassEscape] \D
# 93| [RegExpCharacterClassEscape] \D
# 95| [RegExpConstant, RegExpEscape] \n
# 95| [RegExpSequence] \n\r\t
#-----| 0 -> [RegExpConstant, RegExpEscape] \n
#-----| 1 -> [RegExpConstant, RegExpEscape] \r
#-----| 2 -> [RegExpConstant, RegExpEscape] \t
# 95| [RegExpConstant, RegExpEscape] \r
# 95| [RegExpConstant, RegExpEscape] \t
# 98| [RegExpConstant, RegExpNormalChar] a
# 98| [RegExpSequence] a\0b
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpEscape] \0
#-----| 2 -> [RegExpConstant, RegExpNormalChar] b
# 98| [RegExpConstant, RegExpEscape] \0
# 98| [RegExpConstant, RegExpNormalChar] b
# 102| [RegExpSpecialChar] \b
# 102| [RegExpSequence] \b!a\B
#-----| 0 -> [RegExpSpecialChar] \b
#-----| 1 -> [RegExpConstant, RegExpNormalChar] !a
#-----| 2 -> [RegExpNonWordBoundary] \B
# 102| [RegExpConstant, RegExpNormalChar] !a
# 102| [RegExpNonWordBoundary] \B
# 105| [RegExpGroup] (foo)
#-----| 0 -> [RegExpConstant, RegExpNormalChar] foo
# 105| [RegExpStar] (foo)*
#-----| 0 -> [RegExpGroup] (foo)
# 105| [RegExpSequence] (foo)*bar
#-----| 0 -> [RegExpStar] (foo)*
#-----| 1 -> [RegExpConstant, RegExpNormalChar] bar
# 105| [RegExpConstant, RegExpNormalChar] foo
# 105| [RegExpConstant, RegExpNormalChar] bar
# 106| [RegExpConstant, RegExpNormalChar] fo
# 106| [RegExpSequence] fo(o|b)ar
#-----| 0 -> [RegExpConstant, RegExpNormalChar] fo
#-----| 1 -> [RegExpGroup] (o|b)
#-----| 2 -> [RegExpConstant, RegExpNormalChar] ar
# 106| [RegExpGroup] (o|b)
#-----| 0 -> [RegExpAlt] o|b
# 106| [RegExpConstant, RegExpNormalChar] o
# 106| [RegExpAlt] o|b
#-----| 0 -> [RegExpConstant, RegExpNormalChar] o
#-----| 1 -> [RegExpConstant, RegExpNormalChar] b
# 106| [RegExpConstant, RegExpNormalChar] b
# 106| [RegExpConstant, RegExpNormalChar] ar
# 107| [RegExpGroup] (a|b|cd)
#-----| 0 -> [RegExpAlt] a|b|cd
# 107| [RegExpSequence] (a|b|cd)e
#-----| 0 -> [RegExpGroup] (a|b|cd)
#-----| 1 -> [RegExpConstant, RegExpNormalChar] e
# 107| [RegExpConstant, RegExpNormalChar] a
# 107| [RegExpAlt] a|b|cd
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpNormalChar] b
#-----| 2 -> [RegExpConstant, RegExpNormalChar] cd
# 107| [RegExpConstant, RegExpNormalChar] b
# 107| [RegExpConstant, RegExpNormalChar] cd
# 107| [RegExpConstant, RegExpNormalChar] e
# 108| [RegExpGroup] (?::+)
#-----| 0 -> [RegExpPlus] :+
# 108| [RegExpSequence] (?::+)\w
#-----| 0 -> [RegExpGroup] (?::+)
#-----| 1 -> [RegExpCharacterClassEscape] \w
# 108| [RegExpConstant, RegExpNormalChar] :
# 108| [RegExpPlus] :+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] :
# 108| [RegExpCharacterClassEscape] \w
# 111| [RegExpGroup] (?<id>\w+)
#-----| 0 -> [RegExpPlus] \w+
# 111| [RegExpCharacterClassEscape] \w
# 111| [RegExpPlus] \w+
#-----| 0 -> [RegExpCharacterClassEscape] \w
# 115| [RegExpGroup] (a+)
#-----| 0 -> [RegExpPlus] a+
# 115| [RegExpSequence] (a+)b+\1
#-----| 0 -> [RegExpGroup] (a+)
#-----| 1 -> [RegExpPlus] b+
#-----| 2 -> [RegExpBackRef] \1
# 115| [RegExpConstant, RegExpNormalChar] a
# 115| [RegExpPlus] a+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 115| [RegExpConstant, RegExpNormalChar] b
# 115| [RegExpPlus] b+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] b
# 115| [RegExpBackRef] \1
# 116| [RegExpGroup] (?<qux>q+)
#-----| 0 -> [RegExpPlus] q+
# 116| [RegExpSequence] (?<qux>q+)\s+\k<qux>+
#-----| 0 -> [RegExpGroup] (?<qux>q+)
#-----| 1 -> [RegExpPlus] \s+
#-----| 2 -> [RegExpPlus] \k<qux>+
# 116| [RegExpConstant, RegExpNormalChar] q
# 116| [RegExpPlus] q+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] q
# 116| [RegExpCharacterClassEscape] \s
# 116| [RegExpPlus] \s+
#-----| 0 -> [RegExpCharacterClassEscape] \s
# 116| [RegExpBackRef] \k<qux>
# 116| [RegExpPlus] \k<qux>+
#-----| 0 -> [RegExpBackRef] \k<qux>
# 119| [RegExpCharacterClass] [a-f\d]
#-----| 0 -> [RegExpCharacterRange] a-f
#-----| 1 -> [RegExpCharacterClassEscape] \d
# 119| [RegExpPlus] [a-f\d]+
#-----| 0 -> [RegExpCharacterClass] [a-f\d]
# 119| [RegExpConstant, RegExpNormalChar] a
# 119| [RegExpCharacterRange] a-f
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpNormalChar] f
# 119| [RegExpConstant, RegExpNormalChar] f
# 119| [RegExpCharacterClassEscape] \d
# 122| [RegExpCharacterClass] [[:alpha:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:]
# 122| [RegExpSequence] [[:alpha:]][[:digit:]]
#-----| 0 -> [RegExpCharacterClass] [[:alpha:]]
#-----| 1 -> [RegExpCharacterClass] [[:digit:]]
# 122| [RegExpNamedCharacterProperty] [:alpha:]
# 122| [RegExpCharacterClass] [[:digit:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:digit:]
# 122| [RegExpNamedCharacterProperty] [:digit:]
# 125| [RegExpCharacterClass] [[:alpha:][:digit:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:]
#-----| 1 -> [RegExpNamedCharacterProperty] [:digit:]
# 125| [RegExpNamedCharacterProperty] [:alpha:]
# 125| [RegExpNamedCharacterProperty] [:digit:]
# 128| [RegExpCharacterClass] [A-F[:digit:]a-f]
#-----| 0 -> [RegExpCharacterRange] A-F
#-----| 1 -> [RegExpNamedCharacterProperty] [:digit:]
#-----| 2 -> [RegExpCharacterRange] a-f
# 128| [RegExpConstant, RegExpNormalChar] A
# 128| [RegExpCharacterRange] A-F
#-----| 0 -> [RegExpConstant, RegExpNormalChar] A
#-----| 1 -> [RegExpConstant, RegExpNormalChar] F
# 128| [RegExpConstant, RegExpNormalChar] F
# 128| [RegExpNamedCharacterProperty] [:digit:]
# 128| [RegExpConstant, RegExpNormalChar] a
# 128| [RegExpCharacterRange] a-f
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpNormalChar] f
# 128| [RegExpConstant, RegExpNormalChar] f
# 131| [RegExpNamedCharacterProperty] [:digit:]
# 134| [RegExpNamedCharacterProperty] [:alpha:]
# 137| [RegExpConstant, RegExpNormalChar] a
# 137| [RegExpNamedCharacterProperty] [:b:]
# 137| [RegExpConstant, RegExpNormalChar] c
# 140| [RegExpCharacterClass] [[:alpha:]-z]
#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:]
# 140| [RegExpNamedCharacterProperty] [:alpha:]
# 140| [RegExpCharacterRange] :]-z
#-----| 1 -> [RegExpConstant, RegExpNormalChar] z
# 140| [RegExpConstant, RegExpNormalChar] -
# 140| [RegExpConstant, RegExpNormalChar] z
# 143| [RegExpCharacterClass] [[:alpha]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] [
#-----| 1 -> [RegExpConstant, RegExpNormalChar] :
#-----| 2 -> [RegExpConstant, RegExpNormalChar] a
#-----| 3 -> [RegExpConstant, RegExpNormalChar] l
#-----| 4 -> [RegExpConstant, RegExpNormalChar] p
#-----| 5 -> [RegExpConstant, RegExpNormalChar] h
#-----| 6 -> [RegExpConstant, RegExpNormalChar] a
# 143| [RegExpConstant, RegExpNormalChar] [
# 143| [RegExpConstant, RegExpNormalChar] :
# 143| [RegExpConstant, RegExpNormalChar] a
# 143| [RegExpConstant, RegExpNormalChar] l
# 143| [RegExpConstant, RegExpNormalChar] p
# 143| [RegExpConstant, RegExpNormalChar] h
# 143| [RegExpConstant, RegExpNormalChar] a
# 146| [RegExpCharacterClass] []a[:alpha:]]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] ]
#-----| 1 -> [RegExpConstant, RegExpNormalChar] a
#-----| 2 -> [RegExpNamedCharacterProperty] [:alpha:]
# 146| [RegExpConstant, RegExpNormalChar] ]
# 146| [RegExpConstant, RegExpNormalChar] a
# 146| [RegExpNamedCharacterProperty] [:alpha:]
# 149| [RegExpCharacterClass] [[:alpha:][:digit:][:space:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:]
#-----| 1 -> [RegExpNamedCharacterProperty] [:digit:]
#-----| 2 -> [RegExpNamedCharacterProperty] [:space:]
# 149| [RegExpNamedCharacterProperty] [:alpha:]
# 149| [RegExpNamedCharacterProperty] [:digit:]
# 149| [RegExpNamedCharacterProperty] [:space:]
# 152| [RegExpCharacterClass] [[:xdigit:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:xdigit:]
# 152| [RegExpNamedCharacterProperty] [:xdigit:]
# 153| [RegExpCharacterClass] [[:blank:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:blank:]
# 153| [RegExpNamedCharacterProperty] [:blank:]
# 154| [RegExpCharacterClass] [[:cntrl:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:cntrl:]
# 154| [RegExpNamedCharacterProperty] [:cntrl:]
# 155| [RegExpCharacterClass] [[:graph:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:graph:]
# 155| [RegExpNamedCharacterProperty] [:graph:]
# 158| [RegExpCaret] ^
# 158| [RegExpSequence] ^([[:alpha:]]+[[:digit:]]*[[:space:]]?)+([[:punct:]]|[[:xdigit:]])+$
#-----| 0 -> [RegExpCaret] ^
#-----| 1 -> [RegExpPlus] ([[:alpha:]]+[[:digit:]]*[[:space:]]?)+
#-----| 2 -> [RegExpPlus] ([[:punct:]]|[[:xdigit:]])+
#-----| 3 -> [RegExpDollar] $
# 158| [RegExpGroup] ([[:alpha:]]+[[:digit:]]*[[:space:]]?)
#-----| 0 -> [RegExpSequence] [[:alpha:]]+[[:digit:]]*[[:space:]]?
# 158| [RegExpPlus] ([[:alpha:]]+[[:digit:]]*[[:space:]]?)+
#-----| 0 -> [RegExpGroup] ([[:alpha:]]+[[:digit:]]*[[:space:]]?)
# 158| [RegExpCharacterClass] [[:alpha:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:alpha:]
# 158| [RegExpPlus] [[:alpha:]]+
#-----| 0 -> [RegExpCharacterClass] [[:alpha:]]
# 158| [RegExpSequence] [[:alpha:]]+[[:digit:]]*[[:space:]]?
#-----| 0 -> [RegExpPlus] [[:alpha:]]+
#-----| 1 -> [RegExpStar] [[:digit:]]*
#-----| 2 -> [RegExpOpt] [[:space:]]?
# 158| [RegExpNamedCharacterProperty] [:alpha:]
# 158| [RegExpCharacterClass] [[:digit:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:digit:]
# 158| [RegExpStar] [[:digit:]]*
#-----| 0 -> [RegExpCharacterClass] [[:digit:]]
# 158| [RegExpNamedCharacterProperty] [:digit:]
# 158| [RegExpCharacterClass] [[:space:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:space:]
# 158| [RegExpOpt] [[:space:]]?
#-----| 0 -> [RegExpCharacterClass] [[:space:]]
# 158| [RegExpNamedCharacterProperty] [:space:]
# 158| [RegExpGroup] ([[:punct:]]|[[:xdigit:]])
#-----| 0 -> [RegExpAlt] [[:punct:]]|[[:xdigit:]]
# 158| [RegExpPlus] ([[:punct:]]|[[:xdigit:]])+
#-----| 0 -> [RegExpGroup] ([[:punct:]]|[[:xdigit:]])
# 158| [RegExpCharacterClass] [[:punct:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:punct:]
# 158| [RegExpAlt] [[:punct:]]|[[:xdigit:]]
#-----| 0 -> [RegExpCharacterClass] [[:punct:]]
#-----| 1 -> [RegExpCharacterClass] [[:xdigit:]]
# 158| [RegExpNamedCharacterProperty] [:punct:]
# 158| [RegExpCharacterClass] [[:xdigit:]]
#-----| 0 -> [RegExpNamedCharacterProperty] [:xdigit:]
# 158| [RegExpNamedCharacterProperty] [:xdigit:]
# 158| [RegExpDollar] $
# 163| [RegExpConstant, RegExpEscape] \u9879
# 171| [RegExpConstant, RegExpNormalChar] a
# 171| [RegExpPlus] a+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 171| [RegExpSequence] a+b
#-----| 0 -> [RegExpPlus] a+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] b
# 171| [RegExpConstant, RegExpNormalChar] b
# 174| [RegExpConstant, RegExpNormalChar] a
# 174| [RegExpPlus] a+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 174| [RegExpSequence] a+b
#-----| 0 -> [RegExpPlus] a+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] b
# 174| [RegExpConstant, RegExpNormalChar] b
# 177| [RegExpCharacterClassEscape] \s
# 177| [RegExpPlus] \s+
#-----| 0 -> [RegExpCharacterClassEscape] \s
# 177| [RegExpSequence] \s+$
#-----| 0 -> [RegExpPlus] \s+
#-----| 1 -> [RegExpDollar] $
# 177| [RegExpDollar] $
# 180| [RegExpConstant, RegExpEscape] \(
# 180| [RegExpSequence] \(([,\w]+)+\)$
#-----| 0 -> [RegExpConstant, RegExpEscape] \(
#-----| 1 -> [RegExpPlus] ([,\w]+)+
#-----| 2 -> [RegExpConstant, RegExpEscape] \)
#-----| 3 -> [RegExpDollar] $
# 180| [RegExpGroup] ([,\w]+)
#-----| 0 -> [RegExpPlus] [,\w]+
# 180| [RegExpPlus] ([,\w]+)+
#-----| 0 -> [RegExpGroup] ([,\w]+)
# 180| [RegExpCharacterClass] [,\w]
#-----| 0 -> [RegExpConstant, RegExpNormalChar] ,
#-----| 1 -> [RegExpCharacterClassEscape] \w
# 180| [RegExpPlus] [,\w]+
#-----| 0 -> [RegExpCharacterClass] [,\w]
# 180| [RegExpConstant, RegExpNormalChar] ,
# 180| [RegExpCharacterClassEscape] \w
# 180| [RegExpConstant, RegExpEscape] \)
# 180| [RegExpDollar] $
# 183| [RegExpConstant, RegExpNormalChar] a
# 183| [RegExpPlus] a+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 183| [RegExpSequence] a+b
#-----| 0 -> [RegExpPlus] a+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] b
# 183| [RegExpConstant, RegExpNormalChar] b
# 186| [RegExpConstant, RegExpNormalChar] a
# 186| [RegExpPlus] a+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 186| [RegExpSequence] a+b
#-----| 0 -> [RegExpPlus] a+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] b
# 186| [RegExpConstant, RegExpNormalChar] b
# 189| [RegExpConstant, RegExpNormalChar] a
# 189| [RegExpPlus] a+
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
# 189| [RegExpSequence] a+b
#-----| 0 -> [RegExpPlus] a+
#-----| 1 -> [RegExpConstant, RegExpNormalChar] b
# 189| [RegExpConstant, RegExpNormalChar] b
# 193| [RegExpCharacterClassEscape] \s
# 193| [RegExpPlus] \s+
#-----| 0 -> [RegExpCharacterClassEscape] \s
# 196| [RegExpConstant, RegExpNormalChar] a
# 196| [RegExpSequence] a\.b
#-----| 0 -> [RegExpConstant, RegExpNormalChar] a
#-----| 1 -> [RegExpConstant, RegExpEscape] \.
#-----| 2 -> [RegExpConstant, RegExpNormalChar] b
# 196| [RegExpConstant, RegExpEscape] \.
# 196| [RegExpConstant, RegExpNormalChar] b