| 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() |
| } |
| } |