Ignore:
Timestamp:
Oct 4, 2016, 3:26:12 PM (3 years ago)
Author:
xwa163
Message:

Support BRE and ERE for regex syntax.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • icGREP/icgrep-devel/icgrep/re/re_parser.h

    r5161 r5180  
    2121namespace re {
    2222
     23enum RE_Syntax {FixedStrings, BRE, ERE, PCRE};
    2324enum CharsetOperatorKind
    2425    {intersectOp, setDiffOp, ampChar, hyphenChar, rangeHyphen, posixPropertyOpener, setOpener, setCloser, backSlash, emptyOperator};
     
    4445public:
    4546
    46     static RE * parse(const std::string &input_string, ModeFlagSet initialFlags);
     47    static RE * parse(const std::string &input_string, ModeFlagSet initialFlags, RE_Syntax syntax = RE_Syntax::PCRE);
    4748
    4849   
     
    5152    }
    5253   
    53 private:
     54protected:
    5455    using NameMap = std::map<std::pair<std::string, std::string>, re::Name *>;
    5556
     
    116117    RE_Parser(const std::string & regular_expression, ModeFlagSet initialFlags);
    117118
    118     RE * parse_RE();
     119    virtual RE * parse_RE();
    119120
    120     RE * parse_alt();
     121    virtual RE * parse_alt();
    121122
    122123    RE * parse_seq();
    123124
    124     RE * parse_next_item();
     125    virtual RE * parse_next_item();
    125126
    126     RE * parse_group();
     127    virtual RE * parse_group();
    127128
    128     RE * extend_item(RE * re);
     129    virtual bool isSetEscapeChar(char c);
     130
     131    virtual RE * extend_item(RE * re);
    129132
    130133    RE * parseGraphemeBoundary(RE * re);
    131134
    132     std::pair<int, int> parse_range_bound();
     135    virtual std::pair<int, int> parse_range_bound();
    133136
    134137    unsigned parse_int();
    135138
    136     RE * parse_escaped();
     139    virtual RE * parse_escaped();
    137140
    138     RE * parseEscapedSet();
     141    virtual RE * parseEscapedSet();
    139142
    140143    codepoint_t parse_utf8_codepoint();
    141144
    142     RE * parsePropertyExpression();
     145    virtual RE * parsePropertyExpression();
    143146
    144147    Name * parseNamePatternExpression();
     
    157160    Name * createName(std::string && prop, std::string && value);
    158161
     162    virtual bool isUnsupportChartsetOperator(char c);
    159163    CharsetOperatorKind getCharsetOperator();
    160164
     
    163167    codepoint_t parse_codepoint();
    164168
    165     codepoint_t parse_escaped_codepoint();
     169    virtual codepoint_t parse_escaped_codepoint();
    166170
    167171    codepoint_t parse_hex_codepoint(int mindigits, int maxdigits);
     
    176180    static std::string canonicalize(const cursor_t begin, const cursor_t end);
    177181
    178 private:
     182protected:
    179183
    180184    ModeFlagSet                 fModeFlagSet;
    181185    bool                        fNested;
    182186    bool                        fGraphemeBoundaryPending;
     187    bool                        fSupportNonCaptureGroup;
    183188    Cursor                      mCursor;
    184189    unsigned                    mCaptureGroupCount;
Note: See TracChangeset for help on using the changeset viewer.