Ignore:
Timestamp:
Dec 18, 2017, 1:56:51 PM (16 months ago)
Author:
cameron
Message:

RE parser restructuring; parsing symbolic ranges, collation and equivalence exprs

File:
1 edited

Legend:

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

    r5754 r5787  
    1818
    1919enum CharsetOperatorKind
    20     {intersectOp, setDiffOp, ampChar, hyphenChar, rangeHyphen, posixPropertyOpener, setOpener, setCloser, backSlash, emptyOperator};
    21 
     20    {intersectOp, setDiffOp, ampChar, hyphenChar, rangeHyphen, posixPropertyOpener, setOpener, setCloser, backSlash, emptyOperator};   
     21   
    2222enum ModeFlagType : unsigned {
    2323    DEFAULT_MODE = 0,
    2424    CASE_INSENSITIVE_MODE_FLAG = 1,
    25     MULTILINE_MODE_FLAG = 2,      // not currently implemented
     25    MULTILINE_MODE_FLAG = 2,
    2626    DOTALL_MODE_FLAG = 4,         // not currently implemented
    2727    IGNORE_SPACE_MODE_FLAG = 8,
     
    2929    GRAPHEME_CLUSTER_MODE = 32
    3030};
    31 
    32 const int MAX_REPETITION_LOWER_BOUND = 1024;
    33 const int MAX_REPETITION_UPPER_BOUND = 2048;
    3431
    3532using ModeFlagSet = unsigned;
     
    9188            return mCursor;
    9289        }
    93 
     90       
     91       
    9492        Cursor(const std::string & expression) : mCursor(expression.cbegin()), mEnd(expression.cend()) {}
    9593        Cursor(const Cursor & cursor) : mCursor(cursor.mCursor), mEnd(cursor.mEnd) {}
     
    104102    };
    105103
     104   
     105   
     106    inline bool at(char c) {
     107        return (mCursor.more()) && (*mCursor == c);
     108    }
     109   
     110    inline bool accept(char c) {
     111        if (at(c)) {
     112            mCursor++;
     113            return true;
     114        }
     115        return false;
     116    }
     117   
     118    inline bool atany(std::string s) {
     119        if (mCursor.noMore()) return false;
     120        for (unsigned i = 0; i < s.length(); i++) {
     121            if (s[i] == *mCursor) return true;
     122        }
     123        return false;
     124    }
     125   
     126    inline bool at(std::string s) {
     127        Cursor tmp = mCursor;
     128        for (unsigned i = 0; i < s.length(); i++) {
     129            if (tmp.noMore() || (s[i] != *tmp)) return false;
     130            tmp++;
     131        }
     132        return true;
     133    }
     134   
     135    inline bool accept(std::string s) {
     136        for (unsigned i = 0; i < s.length(); i++) {
     137            if (mCursor.noMore() || (s[i] != *mCursor)) return false;
     138            mCursor++;
     139        }
     140        return true;
     141    }
     142   
     143
    106144    RE_Parser(const std::string & regular_expression);
    107145
     
    111149
    112150    virtual RE * parse_alt();
    113    
    114     virtual bool accept_alt_mark();
    115151   
    116152    virtual RE * parse_seq();
     
    157193    Name * createName(std::string prop, std::string value);
    158194
    159     virtual bool isUnsupportChartsetOperator(char c);
    160     CharsetOperatorKind getCharsetOperator();
    161 
    162     RE * parse_charset();
    163 
     195    RE * parse_extended_bracket_expression();
     196    RE * parse_bracketed_items();
     197    RE * range_extend(RE * e1);
     198   
     199    RE * parse_equivalence_class();
     200    RE * parse_collation_element();
     201    RE * parse_Posix_class();
     202    RE * parse_escaped_char_item();
     203   
    164204    codepoint_t parse_codepoint();
    165205
     
    183223    bool                        fNested;
    184224    unsigned                    mGroupsOpen;
    185     bool                        fGraphemeBoundaryPending;
    186225    bool                        fSupportNonCaptureGroup;
    187226    Cursor                      mCursor;
Note: See TracChangeset for help on using the changeset viewer.