package syntax //go:generate stringer -type=Operation -trimprefix=Op const ( OpNone Operation = iota // OpConcat is a concatenation of ops. // Examples: `xy` `abc\d` `` // Args - concatenated ops // // As a special case, OpConcat with 0 Args is used for "empty" // set of operations. OpConcat // OpDot is a '.' wildcard. OpDot // OpAlt is x|y alternation of ops. // Examples: `a|bc` `x(.*?)|y(.*?)` // Args - union-connected regexp branches OpAlt // OpStar is a shorthand for {0,} repetition. // Examples: `x*` // Args[0] - repeated expression OpStar // OpPlus is a shorthand for {1,} repetition. // Examples: `x+` // Args[0] - repeated expression OpPlus // OpQuestion is a shorthand for {0,1} repetition. // Examples: `x?` // Args[0] - repeated expression OpQuestion // OpNonGreedy makes its operand quantifier non-greedy. // Examples: `x??` `x*?` `x+?` // Args[0] - quantified expression OpNonGreedy // OpPossessive makes its operand quantifier possessive. // Examples: `x?+` `x*+` `x++` // Args[0] - quantified expression OpPossessive // OpCaret is ^ anchor. OpCaret // OpDollar is $ anchor. OpDollar // OpLiteral is a collection of consecutive chars. // Examples: `ab` `10x` // Args - enclosed characters (OpChar) OpLiteral // OpChar is a single literal pattern character. // Examples: `a` `6` `ф` OpChar // OpString is an artificial element that is used in other expressions. OpString // OpQuote is a \Q...\E enclosed literal. // Examples: `\Q.?\E` `\Q?q[]=1` // // Note that closing \E is not mandatory. OpQuote // OpEscapeChar is a single char escape. // Examples: `\d` `\a` `\n` OpEscapeChar // OpEscapeMeta is an escaped meta char. // Examples: `\(` `\[` `\+` OpEscapeMeta // OpEscapeOctal is an octal char code escape (up to 3 digits). // Examples: `\123` `\12` OpEscapeOctal // OpEscapeHex is a hex char code escape. // Examples: `\x7F` `\xF7` // FormEscapeHexFull examples: `\x{10FFFF}` `\x{F}`. OpEscapeHex // OpEscapeUni is a Unicode char class escape. // Examples: `\pS` `\pL` `\PL` // FormEscapeUniFull examples: `\p{Greek}` `\p{Symbol}` `\p{^L}` OpEscapeUni // OpCharClass is a char class enclosed in []. // Examples: `[abc]` `[a-z0-9\]]` // Args - char class elements (can include OpCharRange and OpPosixClass). OpCharClass // OpNegCharClass is a negated char class enclosed in []. // Examples: `[^abc]` `[^a-z0-9\]]` // Args - char class elements (can include OpCharRange and OpPosixClass). OpNegCharClass // OpCharRange is an inclusive char range inside a char class. // Examples: `0-9` `A-Z` // Args[0] - range lower bound (OpChar or OpEscape). // Args[1] - range upper bound (OpChar or OpEscape). OpCharRange // OpPosixClass is a named ASCII char set inside a char class. // Examples: `[:alpha:]` `[:blank:]` OpPosixClass // OpRepeat is a {min,max} repetition quantifier. // Examples: `x{5}` `x{min,max}` `x{min,}` // Args[0] - repeated expression // Args[1] - repeat count (OpString) OpRepeat // OpCapture is `(re)` capturing group. // Examples: `(abc)` `(x|y)` // Args[0] - enclosed expression OpCapture // OpNamedCapture is `(?Pre)` capturing group. // Examples: `(?Pabc)` `(?Px|y)` // FormNamedCaptureAngle examples: `(?abc)` `(?x|y)` // FormNamedCaptureQuote examples: `(?'foo'abc)` `(?'name'x|y)` // Args[0] - enclosed expression (OpConcat with 0 args for empty group) // Args[1] - group name (OpString) OpNamedCapture // OpGroup is `(?:re)` non-capturing group. // Examples: `(?:abc)` `(?:x|y)` // Args[0] - enclosed expression (OpConcat with 0 args for empty group) OpGroup // OpGroupWithFlags is `(?flags:re)` non-capturing group. // Examples: `(?i:abc)` `(?i:x|y)` // Args[0] - enclosed expression (OpConcat with 0 args for empty group) // Args[1] - flags (OpString) OpGroupWithFlags // OpAtomicGroup is `(?>re)` non-capturing group without backtracking. // Examples: `(?>foo)` `(?>)` // Args[0] - enclosed expression (OpConcat with 0 args for empty group) OpAtomicGroup // OpPositiveLookahead is `(?=re)` asserts that following text matches re. // Examples: `(?=foo)` // Args[0] - enclosed expression (OpConcat with 0 args for empty group) OpPositiveLookahead // OpNegativeLookahead is `(?!re)` asserts that following text doesn't match re. // Examples: `(?!foo)` // Args[0] - enclosed expression (OpConcat with 0 args for empty group) OpNegativeLookahead // OpPositiveLookbehind is `(?<=re)` asserts that preceding text matches re. // Examples: `(?<=foo)` // Args[0] - enclosed expression (OpConcat with 0 args for empty group) OpPositiveLookbehind // OpNegativeLookbehind is `(?=re)` asserts that preceding text doesn't match re. // Examples: `(?