blob: b219226ecddbe75dc65cf8226e49e0075bd1c736 [file] [log] [blame]
REGEX AST /^token/ {
Concat()
{
BOL()
MatchLiteral("token")
}
}
REGEX ANNOTATED AST /^token/ {
Concat()
<
features: {BOL,MatchLiteral,Concat}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [t]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [5]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
MatchLiteral("token")
<
features: {MatchLiteral}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
REGEX PROGRAM /^token/
Program {
source: ^token
flags:
numGroups: 1
numLoops: 0
instructions: {
BOITest(hardFail: true)
L0000: MatchLiteral(literal: "token")
L0001: Succ()
}
}
REGEX AST /(\w)?^token/ {
Concat()
{
Loop([0-1], greedy)
{
DefineGroup(1)
{
MatchSet(positive, [0-9A-Z_a-z])
}
}
BOL()
MatchLiteral("token")
}
}
REGEX ANNOTATED AST /(\w)?^token/ {
Concat()
<
features: {BOL,MatchLiteral,Concat,DefineGroup,Loop,MatchSet}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5-6]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: false
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: false
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
Loop([0-1], greedy)
<
features: {DefineGroup,Loop,MatchSet}
firstSet: [0-9A-Z_a-z]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0-1]
followConsumes: [5]
isThisIrrefutable: true
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: false
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: false
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
DefineGroup(1)
<
features: {DefineGroup,MatchSet}
firstSet: [0-9A-Z_a-z] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [1]
followConsumes: [5]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: false
isDeterministic: true
isNotInLoop: false
isNotNegated: true
isAtLeastOnce: false
hasInitialHardFailBOI: false
>
{
MatchSet(positive, [0-9A-Z_a-z])
<
features: {MatchSet}
firstSet: [0-9A-Z_a-z] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [1]
followConsumes: [5]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: false
isDeterministic: true
isNotInLoop: false
isNotNegated: true
isAtLeastOnce: false
hasInitialHardFailBOI: false
>
}
}
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [t]
prevConsumes: [0-1]
thisConsumes: [0]
followConsumes: [5]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: false
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
MatchLiteral("token")
<
features: {MatchLiteral}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0-1]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: false
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
REGEX PROGRAM /(\w)?^token/
Program {
source: (\w)?^token
flags:
numGroups: 2
numLoops: 0
instructions: {
L0000: SyncToLiteralAndBackup(literal: "token" (with full map Boyer-Moore scanner), backup: [0-1])
L0001: TryMatchSet(set: [0-9A-Z_a-z], failLabel: Lffff)
L0002: DefineGroupFixed(groupId: 1, length: 1, noNeedToSave: false)
L0003: BOITest(hardFail: false)
L0004: MatchLiteral(literal: "token")
L0005: Succ()
}
}
REGEX AST /token/ {
MatchLiteral("token")
}
REGEX ANNOTATED AST /token/ {
MatchLiteral("token")
<
features: {MatchLiteral}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
REGEX PROGRAM /token/
Program {
source: token
flags:
numGroups: 1
numLoops: 0
instructions: {
L0000: SyncToLiteralAndConsume(literal: "token" (with full map Boyer-Moore scanner))
L0001: Succ()
}
}
REGEX AST /^^token/ {
Concat()
{
BOL()
BOL()
MatchLiteral("token")
}
}
REGEX ANNOTATED AST /^^token/ {
Concat()
<
features: {BOL,MatchLiteral,Concat}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [5]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [t]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [5]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
MatchLiteral("token")
<
features: {MatchLiteral}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
REGEX PROGRAM /^^token/
Program {
source: ^^token
flags:
numGroups: 1
numLoops: 0
instructions: {
BOITest(hardFail: true)
L0000: MatchLiteral(literal: "token")
L0001: Succ()
}
}
REGEX AST /token^/ {
Concat()
{
MatchLiteral("token")
BOL()
}
}
REGEX ANNOTATED AST /token^/ {
Concat()
<
features: {BOL,MatchLiteral,Concat}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
MatchLiteral("token")
<
features: {MatchLiteral}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [5]
thisConsumes: [0]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
REGEX PROGRAM /token^/
Program {
source: token^
flags:
numGroups: 1
numLoops: 0
instructions: {
L0000: SyncToLiteralAndConsume(literal: "token" (with full map Boyer-Moore scanner))
L0001: BOITest(hardFail: true)
L0002: Succ()
}
}
REGEX AST /token^token/ {
Concat()
{
MatchLiteral("token")
BOL()
MatchLiteral("token")
}
}
REGEX ANNOTATED AST /token^token/ {
Concat()
<
features: {BOL,MatchLiteral,Concat}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [10]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
MatchLiteral("token")
<
features: {MatchLiteral}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [5]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [t]
prevConsumes: [5]
thisConsumes: [0]
followConsumes: [5]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
MatchLiteral("token")
<
features: {MatchLiteral}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [5]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
REGEX PROGRAM /token^token/
Program {
source: token^token
flags:
numGroups: 1
numLoops: 0
instructions: {
L0000: SyncToLiteralAndConsume(literal: "token" (with full map Boyer-Moore scanner))
L0001: BOITest(hardFail: true)
L0002: MatchLiteral(literal: "token")
L0003: Succ()
}
}
REGEX AST /^token|^abc/ {
Alt()
{
Concat()
{
BOL()
MatchLiteral("token")
}
Concat()
{
BOL()
MatchLiteral("abc")
}
}
}
REGEX ANNOTATED AST /^token|^abc/ {
Alt()
<
features: {BOL,MatchLiteral,Concat,Alt}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [3-5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: false
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: false
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
Concat()
<
features: {BOL,MatchLiteral,Concat}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: false
hasInitialHardFailBOI: false
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [t]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [5]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: false
hasInitialHardFailBOI: false
>
MatchLiteral("token")
<
features: {MatchLiteral}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: false
hasInitialHardFailBOI: false
>
}
Concat()
<
features: {BOL,MatchLiteral,Concat}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [3]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: false
hasInitialHardFailBOI: false
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [a]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [3]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: false
hasInitialHardFailBOI: false
>
MatchLiteral("abc")
<
features: {MatchLiteral}
firstSet: [a] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [3]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: false
hasInitialHardFailBOI: false
>
}
}
}
REGEX PROGRAM /^token|^abc/
Program {
source: ^token|^abc
flags:
numGroups: 1
numLoops: 0
instructions: {
L0000: Try(failLabel: Lffff)
L0001: BOITest(hardFail: false)
L0002: MatchLiteral(literal: "token")
L0003: Jump(targetLabel: Lffff)
L0004: BOITest(hardFail: false)
L0005: MatchLiteral(literal: "abc")
L0006: Succ()
}
}
REGEX AST /(?!token)^abc/ {
Concat()
{
Assertion(negative)
{
MatchLiteral("token")
}
BOL()
MatchLiteral("abc")
}
}
REGEX ANNOTATED AST /(?!token)^abc/ {
Concat()
<
features: {BOL,MatchLiteral,Concat,Assertion}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [3]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
{
Assertion(negative)
<
features: {MatchLiteral,Assertion}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [3]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
MatchLiteral("token")
<
features: {MatchLiteral}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0-inf]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: false
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [a]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [3]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
MatchLiteral("abc")
<
features: {MatchLiteral}
firstSet: [a] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [3]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
REGEX PROGRAM /(?!token)^abc/
Program {
source: (?!token)^abc
flags:
numGroups: 1
numLoops: 0
instructions: {
L0000: BeginAssertion(isNegation: true, nextLabel: Lffff, minBodyGroupId: 1, maxBodyGroupId: -1)
L0001: MatchLiteral(literal: "token")
L0002: EndAssertion()
L0003: BOITest(hardFail: true)
L0004: MatchLiteral(literal: "abc")
L0005: Succ()
}
}
REGEX AST /(?=^abc)/ {
Assertion(positive)
{
Concat()
{
BOL()
MatchLiteral("abc")
}
}
}
REGEX ANNOTATED AST /(?=^abc)/ {
Assertion(positive)
<
features: {BOL,MatchLiteral,Concat,Assertion}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
{
Concat()
<
features: {BOL,MatchLiteral,Concat}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [3]
followConsumes: [0-inf]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [a]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [3-inf]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
MatchLiteral("abc")
<
features: {MatchLiteral}
firstSet: [a] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [3]
followConsumes: [0-inf]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
}
REGEX PROGRAM /(?=^abc)/
Program {
source: (?=^abc)
flags:
numGroups: 1
numLoops: 0
instructions: {
L0000: BeginAssertion(isNegation: false, nextLabel: Lffff, minBodyGroupId: 1, maxBodyGroupId: -1)
L0001: BOITest(hardFail: true)
L0002: MatchLiteral(literal: "abc")
L0003: EndAssertion()
L0004: Succ()
}
}
REGEX AST /(^token)/ {
DefineGroup(1)
{
Concat()
{
BOL()
MatchLiteral("token")
}
}
}
REGEX ANNOTATED AST /(^token)/ {
DefineGroup(1)
<
features: {BOL,MatchLiteral,Concat,DefineGroup}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
{
Concat()
<
features: {BOL,MatchLiteral,Concat}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [t]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [5]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
MatchLiteral("token")
<
features: {MatchLiteral}
firstSet: [t] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [5]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
}
REGEX PROGRAM /(^token)/
Program {
source: (^token)
flags:
numGroups: 2
numLoops: 0
instructions: {
BOITest(hardFail: true)
L0000: MatchLiteral(literal: "token")
L0001: DefineGroupFixed(groupId: 1, length: 5, noNeedToSave: true)
L0002: Succ()
}
}
REGEX AST /(^a)+/ {
Loop([1-inf], greedy)
{
DefineGroup(1)
{
Concat()
{
BOL()
MatchChar('a')
}
}
}
}
REGEX ANNOTATED AST /(^a)+/ {
Loop([1-inf], greedy)
<
features: {BOL,MatchChar,Concat,DefineGroup,Loop}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [1-inf]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: false
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: false
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
DefineGroup(1)
<
features: {BOL,MatchChar,Concat,DefineGroup}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0-inf]
thisConsumes: [1]
followConsumes: [0-inf]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: false
isDeterministic: true
isNotInLoop: false
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
Concat()
<
features: {BOL,MatchChar,Concat}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0-inf]
thisConsumes: [1]
followConsumes: [0-inf]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: false
isDeterministic: true
isNotInLoop: false
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [a]
prevConsumes: [0-inf]
thisConsumes: [0]
followConsumes: [1-inf]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: false
isDeterministic: true
isNotInLoop: false
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
MatchChar('a')
<
features: {MatchChar}
firstSet: [a] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0-inf]
thisConsumes: [1]
followConsumes: [0-inf]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: false
isDeterministic: true
isNotInLoop: false
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
}
}
REGEX PROGRAM /(^a)+/
Program {
source: (^a)+
flags:
numGroups: 2
numLoops: 1
instructions: {
L0000: SyncToCharAndBackup(c: 'a', backup: [0-inf])
L0001: BeginLoopFixedGroupLastIteration(loopId: 0, repeats: [1-inf], exitLabel: Lffff, hasOuterLoops: false, hasInnerNondet: false, length: 1, groupId: 1, noNeedToSave: true)
L0002: BOITest(hardFail: false)
L0003: MatchChar(c: 'a')
L0004: RepeatLoopFixedGroupLastIteration(beginLabel: Lffff)
L0005: Succ()
}
}
REGEX AST /(?=^)/ {
Assertion(positive)
{
BOL()
}
}
REGEX ANNOTATED AST /(?=^)/ {
Assertion(positive)
<
features: {BOL,Assertion}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [0-inf]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
}
}
REGEX PROGRAM /(?=^)/
Program {
source: (?=^)
flags:
numGroups: 1
numLoops: 0
instructions: {
L0000: BeginAssertion(isNegation: false, nextLabel: Lffff, minBodyGroupId: 1, maxBodyGroupId: -1)
L0001: BOITest(hardFail: true)
L0002: EndAssertion()
L0003: Succ()
}
}
REGEX AST /(^)/ {
DefineGroup(1)
{
BOL()
}
}
REGEX ANNOTATED AST /(^)/ {
DefineGroup(1)
<
features: {BOL,DefineGroup}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: true
>
}
}
REGEX PROGRAM /(^)/
Program {
source: (^)
flags:
numGroups: 2
numLoops: 0
instructions: {
BOITest(hardFail: true)
L0000: DefineGroupFixed(groupId: 1, length: 0, noNeedToSave: true)
L0001: Succ()
}
}
REGEX AST /(^)+/ {
Loop([1-inf], greedy)
{
DefineGroup(1)
{
BOL()
}
}
}
REGEX ANNOTATED AST /(^)+/ {
Loop([1-inf], greedy)
<
features: {BOL,DefineGroup,Loop}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: false
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: false
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
DefineGroup(1)
<
features: {BOL,DefineGroup}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: false
isDeterministic: true
isNotInLoop: false
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: false
isDeterministic: true
isNotInLoop: false
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
}
REGEX PROGRAM /(^)+/
Program {
source: (^)+
flags:
numGroups: 2
numLoops: 1
instructions: {
L0000: BeginLoop(loopId: 0, repeats: [1-inf], exitLabel: Lffff, hasOuterLoops: false, hasInnerNondet: false, minBodyGroupId: 1, maxBodyGroupId: 1, greedy: true)
L0001: BOITest(hardFail: false)
L0002: DefineGroupFixed(groupId: 1, length: 0, noNeedToSave: false)
L0003: RepeatLoop(beginLabel: Lffff)
L0004: Succ()
}
}
REGEX AST /(?!^)/ {
Assertion(negative)
{
BOL()
}
}
REGEX ANNOTATED AST /(?!^)/ {
Assertion(negative)
<
features: {BOL,Assertion}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [0]
followConsumes: [0-inf]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: true
isNotNegated: false
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
REGEX PROGRAM /(?!^)/
Program {
source: (?!^)
flags:
numGroups: 1
numLoops: 0
instructions: {
L0000: BeginAssertion(isNegation: true, nextLabel: Lffff, minBodyGroupId: 1, maxBodyGroupId: -1)
L0001: BOITest(hardFail: false)
L0002: EndAssertion()
L0003: Succ()
}
}
REGEX AST /(?:^abc)+?/ {
Loop([1-inf], non-greedy)
{
Concat()
{
BOL()
MatchLiteral("abc")
}
}
}
REGEX ANNOTATED AST /(?:^abc)+?/ {
Loop([1-inf], non-greedy)
<
features: {BOL,MatchLiteral,Concat,Loop}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0]
thisConsumes: [3-inf]
followConsumes: [0]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: false
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: false
isNotInLoop: true
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
Concat()
<
features: {BOL,MatchLiteral,Concat}
firstSet: [\x00-\uffff]
followSet: [\x00-\uffff]
prevConsumes: [0-inf]
thisConsumes: [3]
followConsumes: [0-inf]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: false
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
{
BOL()
<
features: {BOL}
firstSet: [\x00-\uffff]
followSet: [a]
prevConsumes: [0-inf]
thisConsumes: [0]
followConsumes: [3-inf]
isThisIrrefutable: false
isFollowIrrefutable: false
isWord: false
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: false
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
MatchLiteral("abc")
<
features: {MatchLiteral}
firstSet: [a] (exact)
followSet: [\x00-\uffff]
prevConsumes: [0-inf]
thisConsumes: [3]
followConsumes: [0-inf]
isThisIrrefutable: false
isFollowIrrefutable: true
isWord: true
isThisWillNotProgress: true
isThisWillNotRegress: true
isPrevWillNotProgress: false
isPrevWillNotRegress: true
isDeterministic: true
isNotInLoop: false
isNotNegated: true
isAtLeastOnce: true
hasInitialHardFailBOI: false
>
}
}
}
REGEX PROGRAM /(?:^abc)+?/
Program {
source: (?:^abc)+?
flags:
numGroups: 1
numLoops: 1
instructions: {
L0000: SyncToLiteralAndBackup(literal: "abc" (with linear map Boyer-Moore scanner), backup: [0-inf])
L0001: BeginLoop(loopId: 0, repeats: [1-inf], exitLabel: Lffff, hasOuterLoops: false, hasInnerNondet: false, minBodyGroupId: 1, maxBodyGroupId: -1, greedy: false)
L0002: BOITest(hardFail: true)
L0003: MatchLiteral(literal: "abc")
L0004: RepeatLoop(beginLabel: Lffff)
L0005: Succ()
}
}