// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//---------------------------------------------------------------------------------
//
// Generated Header File.  Do not edit by hand.
//    This file contains the state table for the ICU Regular Expression Pattern Parser
//    It is generated by the Perl script "regexcst.pl" from
//    the rule parser state definitions file "regexcst.txt".
//
//   Copyright (C) 2002-2016 International Business Machines Corporation
//   and others. All rights reserved.
//
//---------------------------------------------------------------------------------
#ifndef RBBIRPT_H
#define RBBIRPT_H

#include "unicode/utypes.h"

U_NAMESPACE_BEGIN
//
// Character classes for regex pattern scanning.
//
    static const uint8_t kRuleSet_ascii_letter = 128;
    static const uint8_t kRuleSet_digit_char = 129;
    static const uint8_t kRuleSet_rule_char = 130;


enum Regex_PatternParseAction {
    doSetBackslash_V,
    doSetBackslash_h,
    doBeginNamedBackRef,
    doSetMatchMode,
    doEnterQuoteMode,
    doOpenCaptureParen,
    doContinueNamedCapture,
    doSetBackslash_d,
    doBeginMatchMode,
    doBackslashX,
    doSetPosixProp,
    doIntervalError,
    doSetLiteralEscaped,
    doSetBackslash_s,
    doNOP,
    doBackslashv,
    doOpenLookBehind,
    doPatStart,
    doPossessiveInterval,
    doOpenAtomicParen,
    doOpenLookAheadNeg,
    doBackslashd,
    doBackslashZ,
    doIntervalUpperDigit,
    doBadNamedCapture,
    doSetDifference2,
    doSetAddAmp,
    doSetNamedChar,
    doNamedChar,
    doSetBackslash_H,
    doBackslashb,
    doBackslashz,
    doSetBeginDifference1,
    doOpenLookAhead,
    doMatchModeParen,
    doBackslashV,
    doIntevalLowerDigit,
    doCaret,
    doSetEnd,
    doSetNegate,
    doBackslashS,
    doOrOperator,
    doBackslashB,
    doBackslashw,
    doBackslashR,
    doRuleError,
    doDotAny,
    doMatchMode,
    doSetBackslash_W,
    doNGPlus,
    doSetBackslash_D,
    doPossessiveOpt,
    doSetNamedRange,
    doConditionalExpr,
    doBackslashs,
    doPossessiveStar,
    doPlus,
    doBadOpenParenType,
    doCloseParen,
    doNGInterval,
    doSetProp,
    doBackRef,
    doSetBeginUnion,
    doEscapeError,
    doOpt,
    doSetBeginIntersection1,
    doPossessivePlus,
    doBackslashD,
    doOpenLookBehindNeg,
    doSetBegin,
    doSetIntersection2,
    doCompleteNamedBackRef,
    doSetRange,
    doDollar,
    doBackslashH,
    doExit,
    doNGOpt,
    doOpenNonCaptureParen,
    doBackslashA,
    doSetBackslash_v,
    doBackslashh,
    doBadModeFlag,
    doSetNoCloseError,
    doIntervalSame,
    doSetAddDash,
    doBackslashW,
    doPerlInline,
    doSetOpError,
    doSetLiteral,
    doPatFinish,
    doBeginNamedCapture,
    doEscapedLiteralChar,
    doLiteralChar,
    doSuppressComments,
    doMismatchedParenErr,
    doNGStar,
    doSetFinish,
    doInterval,
    doBackslashG,
    doStar,
    doSetBackslash_w,
    doSetBackslash_S,
    doProperty,
    doContinueNamedBackRef,
    doIntervalInit,
    rbbiLastAction};

//-------------------------------------------------------------------------------
//
//  RegexTableEl       represents the structure of a row in the transition table
//                     for the pattern parser state machine.
//-------------------------------------------------------------------------------
struct RegexTableEl {
    Regex_PatternParseAction      fAction;
    uint8_t                       fCharClass;       // 0-127:    an individual ASCII character
                                                    // 128-255:  character class index
    uint8_t                       fNextState;       // 0-250:    normal next-state numbers
                                                    // 255:      pop next-state from stack.
    uint8_t                       fPushState;
    UBool                         fNextChar;
};

static const struct RegexTableEl gRuleParseStateTable[] = {
    {doNOP, 0, 0, 0, TRUE}
    , {doPatStart, 255, 2,0,  FALSE}     //  1      start
    , {doLiteralChar, 254, 14,0,  TRUE}     //  2      term
    , {doLiteralChar, 130, 14,0,  TRUE}     //  3
    , {doSetBegin, 91 /* [ */, 123, 205, TRUE}     //  4
    , {doNOP, 40 /* ( */, 27,0,  TRUE}     //  5
    , {doDotAny, 46 /* . */, 14,0,  TRUE}     //  6
    , {doCaret, 94 /* ^ */, 14,0,  TRUE}     //  7
    , {doDollar, 36 /* $ */, 14,0,  TRUE}     //  8
    , {doNOP, 92 /* \ */, 89,0,  TRUE}     //  9
    , {doOrOperator, 124 /* | */, 2,0,  TRUE}     //  10
    , {doCloseParen, 41 /* ) */, 255,0,  TRUE}     //  11
    , {doPatFinish, 253, 2,0,  FALSE}     //  12
    , {doRuleError, 255, 206,0,  FALSE}     //  13
    , {doNOP, 42 /* * */, 68,0,  TRUE}     //  14      expr-quant
    , {doNOP, 43 /* + */, 71,0,  TRUE}     //  15
    , {doNOP, 63 /* ? */, 74,0,  TRUE}     //  16
    , {doIntervalInit, 123 /* { */, 77,0,  TRUE}     //  17
    , {doNOP, 40 /* ( */, 23,0,  TRUE}     //  18
    , {doNOP, 255, 20,0,  FALSE}     //  19
    , {doOrOperator, 124 /* | */, 2,0,  TRUE}     //  20      expr-cont
    , {doCloseParen, 41 /* ) */, 255,0,  TRUE}     //  21
    , {doNOP, 255, 2,0,  FALSE}     //  22
    , {doSuppressComments, 63 /* ? */, 25,0,  TRUE}     //  23      open-paren-quant
    , {doNOP, 255, 27,0,  FALSE}     //  24
    , {doNOP, 35 /* # */, 50, 14, TRUE}     //  25      open-paren-quant2
    , {doNOP, 255, 29,0,  FALSE}     //  26
    , {doSuppressComments, 63 /* ? */, 29,0,  TRUE}     //  27      open-paren
    , {doOpenCaptureParen, 255, 2, 14, FALSE}     //  28
    , {doOpenNonCaptureParen, 58 /* : */, 2, 14, TRUE}     //  29      open-paren-extended
    , {doOpenAtomicParen, 62 /* > */, 2, 14, TRUE}     //  30
    , {doOpenLookAhead, 61 /* = */, 2, 20, TRUE}     //  31
    , {doOpenLookAheadNeg, 33 /* ! */, 2, 20, TRUE}     //  32
    , {doNOP, 60 /* < */, 46,0,  TRUE}     //  33
    , {doNOP, 35 /* # */, 50, 2, TRUE}     //  34
    , {doBeginMatchMode, 105 /* i */, 53,0,  FALSE}     //  35
    , {doBeginMatchMode, 100 /* d */, 53,0,  FALSE}     //  36
    , {doBeginMatchMode, 109 /* m */, 53,0,  FALSE}     //  37
    , {doBeginMatchMode, 115 /* s */, 53,0,  FALSE}     //  38
    , {doBeginMatchMode, 117 /* u */, 53,0,  FALSE}     //  39
    , {doBeginMatchMode, 119 /* w */, 53,0,  FALSE}     //  40
    , {doBeginMatchMode, 120 /* x */, 53,0,  FALSE}     //  41
    , {doBeginMatchMode, 45 /* - */, 53,0,  FALSE}     //  42
    , {doConditionalExpr, 40 /* ( */, 206,0,  TRUE}     //  43
    , {doPerlInline, 123 /* { */, 206,0,  TRUE}     //  44
    , {doBadOpenParenType, 255, 206,0,  FALSE}     //  45
    , {doOpenLookBehind, 61 /* = */, 2, 20, TRUE}     //  46      open-paren-lookbehind
    , {doOpenLookBehindNeg, 33 /* ! */, 2, 20, TRUE}     //  47
    , {doBeginNamedCapture, 128, 64,0,  FALSE}     //  48
    , {doBadOpenParenType, 255, 206,0,  FALSE}     //  49
    , {doNOP, 41 /* ) */, 255,0,  TRUE}     //  50      paren-comment
    , {doMismatchedParenErr, 253, 206,0,  FALSE}     //  51
    , {doNOP, 255, 50,0,  TRUE}     //  52
    , {doMatchMode, 105 /* i */, 53,0,  TRUE}     //  53      paren-flag
    , {doMatchMode, 100 /* d */, 53,0,  TRUE}     //  54
    , {doMatchMode, 109 /* m */, 53,0,  TRUE}     //  55
    , {doMatchMode, 115 /* s */, 53,0,  TRUE}     //  56
    , {doMatchMode, 117 /* u */, 53,0,  TRUE}     //  57
    , {doMatchMode, 119 /* w */, 53,0,  TRUE}     //  58
    , {doMatchMode, 120 /* x */, 53,0,  TRUE}     //  59
    , {doMatchMode, 45 /* - */, 53,0,  TRUE}     //  60
    , {doSetMatchMode, 41 /* ) */, 2,0,  TRUE}     //  61
    , {doMatchModeParen, 58 /* : */, 2, 14, TRUE}     //  62
    , {doBadModeFlag, 255, 206,0,  FALSE}     //  63
    , {doContinueNamedCapture, 128, 64,0,  TRUE}     //  64      named-capture
    , {doContinueNamedCapture, 129, 64,0,  TRUE}     //  65
    , {doOpenCaptureParen, 62 /* > */, 2, 14, TRUE}     //  66
    , {doBadNamedCapture, 255, 206,0,  FALSE}     //  67
    , {doNGStar, 63 /* ? */, 20,0,  TRUE}     //  68      quant-star
    , {doPossessiveStar, 43 /* + */, 20,0,  TRUE}     //  69
    , {doStar, 255, 20,0,  FALSE}     //  70
    , {doNGPlus, 63 /* ? */, 20,0,  TRUE}     //  71      quant-plus
    , {doPossessivePlus, 43 /* + */, 20,0,  TRUE}     //  72
    , {doPlus, 255, 20,0,  FALSE}     //  73
    , {doNGOpt, 63 /* ? */, 20,0,  TRUE}     //  74      quant-opt
    , {doPossessiveOpt, 43 /* + */, 20,0,  TRUE}     //  75
    , {doOpt, 255, 20,0,  FALSE}     //  76
    , {doNOP, 129, 79,0,  FALSE}     //  77      interval-open
    , {doIntervalError, 255, 206,0,  FALSE}     //  78
    , {doIntevalLowerDigit, 129, 79,0,  TRUE}     //  79      interval-lower
    , {doNOP, 44 /* , */, 83,0,  TRUE}     //  80
    , {doIntervalSame, 125 /* } */, 86,0,  TRUE}     //  81
    , {doIntervalError, 255, 206,0,  FALSE}     //  82
    , {doIntervalUpperDigit, 129, 83,0,  TRUE}     //  83      interval-upper
    , {doNOP, 125 /* } */, 86,0,  TRUE}     //  84
    , {doIntervalError, 255, 206,0,  FALSE}     //  85
    , {doNGInterval, 63 /* ? */, 20,0,  TRUE}     //  86      interval-type
    , {doPossessiveInterval, 43 /* + */, 20,0,  TRUE}     //  87
    , {doInterval, 255, 20,0,  FALSE}     //  88
    , {doBackslashA, 65 /* A */, 2,0,  TRUE}     //  89      backslash
    , {doBackslashB, 66 /* B */, 2,0,  TRUE}     //  90
    , {doBackslashb, 98 /* b */, 2,0,  TRUE}     //  91
    , {doBackslashd, 100 /* d */, 14,0,  TRUE}     //  92
    , {doBackslashD, 68 /* D */, 14,0,  TRUE}     //  93
    , {doBackslashG, 71 /* G */, 2,0,  TRUE}     //  94
    , {doBackslashh, 104 /* h */, 14,0,  TRUE}     //  95
    , {doBackslashH, 72 /* H */, 14,0,  TRUE}     //  96
    , {doNOP, 107 /* k */, 115,0,  TRUE}     //  97
    , {doNamedChar, 78 /* N */, 14,0,  FALSE}     //  98
    , {doProperty, 112 /* p */, 14,0,  FALSE}     //  99
    , {doProperty, 80 /* P */, 14,0,  FALSE}     //  100
    , {doBackslashR, 82 /* R */, 14,0,  TRUE}     //  101
    , {doEnterQuoteMode, 81 /* Q */, 2,0,  TRUE}     //  102
    , {doBackslashS, 83 /* S */, 14,0,  TRUE}     //  103
    , {doBackslashs, 115 /* s */, 14,0,  TRUE}     //  104
    , {doBackslashv, 118 /* v */, 14,0,  TRUE}     //  105
    , {doBackslashV, 86 /* V */, 14,0,  TRUE}     //  106
    , {doBackslashW, 87 /* W */, 14,0,  TRUE}     //  107
    , {doBackslashw, 119 /* w */, 14,0,  TRUE}     //  108
    , {doBackslashX, 88 /* X */, 14,0,  TRUE}     //  109
    , {doBackslashZ, 90 /* Z */, 2,0,  TRUE}     //  110
    , {doBackslashz, 122 /* z */, 2,0,  TRUE}     //  111
    , {doBackRef, 129, 14,0,  TRUE}     //  112
    , {doEscapeError, 253, 206,0,  FALSE}     //  113
    , {doEscapedLiteralChar, 255, 14,0,  TRUE}     //  114
    , {doBeginNamedBackRef, 60 /* < */, 117,0,  TRUE}     //  115      named-backref
    , {doBadNamedCapture, 255, 206,0,  FALSE}     //  116
    , {doContinueNamedBackRef, 128, 119,0,  TRUE}     //  117      named-backref-2
    , {doBadNamedCapture, 255, 206,0,  FALSE}     //  118
    , {doContinueNamedBackRef, 128, 119,0,  TRUE}     //  119      named-backref-3
    , {doContinueNamedBackRef, 129, 119,0,  TRUE}     //  120
    , {doCompleteNamedBackRef, 62 /* > */, 14,0,  TRUE}     //  121
    , {doBadNamedCapture, 255, 206,0,  FALSE}     //  122
    , {doSetNegate, 94 /* ^ */, 126,0,  TRUE}     //  123      set-open
    , {doSetPosixProp, 58 /* : */, 128,0,  FALSE}     //  124
    , {doNOP, 255, 126,0,  FALSE}     //  125
    , {doSetLiteral, 93 /* ] */, 141,0,  TRUE}     //  126      set-open2
    , {doNOP, 255, 131,0,  FALSE}     //  127
    , {doSetEnd, 93 /* ] */, 255,0,  TRUE}     //  128      set-posix
    , {doNOP, 58 /* : */, 131,0,  FALSE}     //  129
    , {doRuleError, 255, 206,0,  FALSE}     //  130
    , {doSetEnd, 93 /* ] */, 255,0,  TRUE}     //  131      set-start
    , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE}     //  132
    , {doNOP, 92 /* \ */, 191,0,  TRUE}     //  133
    , {doNOP, 45 /* - */, 137,0,  TRUE}     //  134
    , {doNOP, 38 /* & */, 139,0,  TRUE}     //  135
    , {doSetLiteral, 255, 141,0,  TRUE}     //  136
    , {doRuleError, 45 /* - */, 206,0,  FALSE}     //  137      set-start-dash
    , {doSetAddDash, 255, 141,0,  FALSE}     //  138
    , {doRuleError, 38 /* & */, 206,0,  FALSE}     //  139      set-start-amp
    , {doSetAddAmp, 255, 141,0,  FALSE}     //  140
    , {doSetEnd, 93 /* ] */, 255,0,  TRUE}     //  141      set-after-lit
    , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE}     //  142
    , {doNOP, 45 /* - */, 178,0,  TRUE}     //  143
    , {doNOP, 38 /* & */, 169,0,  TRUE}     //  144
    , {doNOP, 92 /* \ */, 191,0,  TRUE}     //  145
    , {doSetNoCloseError, 253, 206,0,  FALSE}     //  146
    , {doSetLiteral, 255, 141,0,  TRUE}     //  147
    , {doSetEnd, 93 /* ] */, 255,0,  TRUE}     //  148      set-after-set
    , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE}     //  149
    , {doNOP, 45 /* - */, 171,0,  TRUE}     //  150
    , {doNOP, 38 /* & */, 166,0,  TRUE}     //  151
    , {doNOP, 92 /* \ */, 191,0,  TRUE}     //  152
    , {doSetNoCloseError, 253, 206,0,  FALSE}     //  153
    , {doSetLiteral, 255, 141,0,  TRUE}     //  154
    , {doSetEnd, 93 /* ] */, 255,0,  TRUE}     //  155      set-after-range
    , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE}     //  156
    , {doNOP, 45 /* - */, 174,0,  TRUE}     //  157
    , {doNOP, 38 /* & */, 176,0,  TRUE}     //  158
    , {doNOP, 92 /* \ */, 191,0,  TRUE}     //  159
    , {doSetNoCloseError, 253, 206,0,  FALSE}     //  160
    , {doSetLiteral, 255, 141,0,  TRUE}     //  161
    , {doSetBeginUnion, 91 /* [ */, 123, 148, TRUE}     //  162      set-after-op
    , {doSetOpError, 93 /* ] */, 206,0,  FALSE}     //  163
    , {doNOP, 92 /* \ */, 191,0,  TRUE}     //  164
    , {doSetLiteral, 255, 141,0,  TRUE}     //  165
    , {doSetBeginIntersection1, 91 /* [ */, 123, 148, TRUE}     //  166      set-set-amp
    , {doSetIntersection2, 38 /* & */, 162,0,  TRUE}     //  167
    , {doSetAddAmp, 255, 141,0,  FALSE}     //  168
    , {doSetIntersection2, 38 /* & */, 162,0,  TRUE}     //  169      set-lit-amp
    , {doSetAddAmp, 255, 141,0,  FALSE}     //  170
    , {doSetBeginDifference1, 91 /* [ */, 123, 148, TRUE}     //  171      set-set-dash
    , {doSetDifference2, 45 /* - */, 162,0,  TRUE}     //  172
    , {doSetAddDash, 255, 141,0,  FALSE}     //  173
    , {doSetDifference2, 45 /* - */, 162,0,  TRUE}     //  174      set-range-dash
    , {doSetAddDash, 255, 141,0,  FALSE}     //  175
    , {doSetIntersection2, 38 /* & */, 162,0,  TRUE}     //  176      set-range-amp
    , {doSetAddAmp, 255, 141,0,  FALSE}     //  177
    , {doSetDifference2, 45 /* - */, 162,0,  TRUE}     //  178      set-lit-dash
    , {doSetAddDash, 91 /* [ */, 141,0,  FALSE}     //  179
    , {doSetAddDash, 93 /* ] */, 141,0,  FALSE}     //  180
    , {doNOP, 92 /* \ */, 183,0,  TRUE}     //  181
    , {doSetRange, 255, 155,0,  TRUE}     //  182
    , {doSetOpError, 115 /* s */, 206,0,  FALSE}     //  183      set-lit-dash-escape
    , {doSetOpError, 83 /* S */, 206,0,  FALSE}     //  184
    , {doSetOpError, 119 /* w */, 206,0,  FALSE}     //  185
    , {doSetOpError, 87 /* W */, 206,0,  FALSE}     //  186
    , {doSetOpError, 100 /* d */, 206,0,  FALSE}     //  187
    , {doSetOpError, 68 /* D */, 206,0,  FALSE}     //  188
    , {doSetNamedRange, 78 /* N */, 155,0,  FALSE}     //  189
    , {doSetRange, 255, 155,0,  TRUE}     //  190
    , {doSetProp, 112 /* p */, 148,0,  FALSE}     //  191      set-escape
    , {doSetProp, 80 /* P */, 148,0,  FALSE}     //  192
    , {doSetNamedChar, 78 /* N */, 141,0,  FALSE}     //  193
    , {doSetBackslash_s, 115 /* s */, 155,0,  TRUE}     //  194
    , {doSetBackslash_S, 83 /* S */, 155,0,  TRUE}     //  195
    , {doSetBackslash_w, 119 /* w */, 155,0,  TRUE}     //  196
    , {doSetBackslash_W, 87 /* W */, 155,0,  TRUE}     //  197
    , {doSetBackslash_d, 100 /* d */, 155,0,  TRUE}     //  198
    , {doSetBackslash_D, 68 /* D */, 155,0,  TRUE}     //  199
    , {doSetBackslash_h, 104 /* h */, 155,0,  TRUE}     //  200
    , {doSetBackslash_H, 72 /* H */, 155,0,  TRUE}     //  201
    , {doSetBackslash_v, 118 /* v */, 155,0,  TRUE}     //  202
    , {doSetBackslash_V, 86 /* V */, 155,0,  TRUE}     //  203
    , {doSetLiteralEscaped, 255, 141,0,  TRUE}     //  204
    , {doSetFinish, 255, 14,0,  FALSE}     //  205      set-finish
    , {doExit, 255, 206,0,  TRUE}     //  206      errorDeath
 };
static const char * const RegexStateNames[] = {    0,
     "start",
     "term",
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
     "expr-quant",
    0,
    0,
    0,
    0,
    0,
     "expr-cont",
    0,
    0,
     "open-paren-quant",
    0,
     "open-paren-quant2",
    0,
     "open-paren",
    0,
     "open-paren-extended",
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
     "open-paren-lookbehind",
    0,
    0,
    0,
     "paren-comment",
    0,
    0,
     "paren-flag",
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
     "named-capture",
    0,
    0,
    0,
     "quant-star",
    0,
    0,
     "quant-plus",
    0,
    0,
     "quant-opt",
    0,
    0,
     "interval-open",
    0,
     "interval-lower",
    0,
    0,
    0,
     "interval-upper",
    0,
    0,
     "interval-type",
    0,
    0,
     "backslash",
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
     "named-backref",
    0,
     "named-backref-2",
    0,
     "named-backref-3",
    0,
    0,
    0,
     "set-open",
    0,
    0,
     "set-open2",
    0,
     "set-posix",
    0,
    0,
     "set-start",
    0,
    0,
    0,
    0,
    0,
     "set-start-dash",
    0,
     "set-start-amp",
    0,
     "set-after-lit",
    0,
    0,
    0,
    0,
    0,
    0,
     "set-after-set",
    0,
    0,
    0,
    0,
    0,
    0,
     "set-after-range",
    0,
    0,
    0,
    0,
    0,
    0,
     "set-after-op",
    0,
    0,
    0,
     "set-set-amp",
    0,
    0,
     "set-lit-amp",
    0,
     "set-set-dash",
    0,
    0,
     "set-range-dash",
    0,
     "set-range-amp",
    0,
     "set-lit-dash",
    0,
    0,
    0,
    0,
     "set-lit-dash-escape",
    0,
    0,
    0,
    0,
    0,
    0,
    0,
     "set-escape",
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
     "set-finish",
     "errorDeath",
    0};

U_NAMESPACE_END
#endif
