Ignore:
Timestamp:
Oct 11, 2015, 1:45:52 PM (4 years ago)
Author:
nmedfort
Message:

Back-up check in

File:
1 edited

Legend:

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

    r4819 r4829  
    1717#include <map>
    1818#include <re/re_memoizer.hpp>
     19#include <re/parsefailure.h>
    1920
    2021namespace re {
     
    4344private:
    4445
    45     using NameMap = std::map<std::pair<std::string, std::string>, re::RE *>;
     46    using NameMap = std::map<std::pair<std::string, std::string>, re::Name *>;
    4647
    4748    using cursor_t = std::string::const_iterator;
     49
     50    using char_t = const std::string::value_type;
     51
     52    struct Cursor {
     53
     54        inline Cursor & operator++() {
     55            if (LLVM_UNLIKELY(mCursor == mEnd)) {
     56                throw IncompleteRegularExpression();
     57            }
     58            ++mCursor;
     59            return *this;
     60        }
     61
     62        inline Cursor operator++(int) {
     63            if (LLVM_UNLIKELY(mCursor == mEnd)) {
     64                throw IncompleteRegularExpression();
     65            }
     66            Cursor tmp(*this);
     67            ++mCursor;
     68            return tmp;
     69        }
     70
     71        inline const char_t operator*() const {
     72            if (LLVM_UNLIKELY(mCursor == mEnd)) {
     73                throw IncompleteRegularExpression();
     74            }
     75            return *mCursor;
     76        }
     77
     78        inline bool noMore() const {
     79            return mCursor == mEnd;
     80        }
     81
     82        inline bool more() const {
     83            return mCursor != mEnd;
     84        }
     85
     86        inline cursor_t::difference_type remaining() const {
     87            return mEnd - mCursor;
     88        }
     89
     90        inline cursor_t pos() const {
     91            return mCursor;
     92        }
     93
     94        Cursor(const std::string & expression) : mCursor(expression.cbegin()), mEnd(expression.cend()) {}
     95        Cursor(const Cursor & cursor) : mCursor(cursor.mCursor), mEnd(cursor.mEnd) {}
     96        inline Cursor & operator=(const Cursor & cursor) {
     97            mCursor = cursor.mCursor;
     98            mEnd = cursor.mEnd;
     99            return *this;
     100        }
     101    private:
     102        cursor_t    mCursor;
     103        cursor_t    mEnd;
     104    };
    48105
    49106    RE_Parser(const std::string & regular_expression);
     
    63120    RE * extend_item(RE * re);
    64121
    65     void parse_range_bound(int & lo_codepoint, int & hi_codepoint);
     122    RE * parseGraphemeBoundary(RE * re);
     123
     124    std::pair<int, int> parse_range_bound();
    66125
    67126    unsigned parse_int();
     
    80139    RE * makeWordBoundary();
    81140    RE * makeWordNonBoundary();
    82     RE * makeDigitSet();
    83     RE * makeAlphaNumeric();
    84     RE * makeWhitespaceSet();
    85     RE * makeWordSet();
     141    Name * makeDigitSet();
     142    Name * makeAlphaNumeric();
     143    Name * makeWhitespaceSet();
     144    Name * makeWordSet();
    86145
    87     RE * createName(const std::string value);
    88     RE * createName(const std::string prop, const std::string value);
     146    Name * createName(std::string && value);
     147    Name * createName(std::string && prop, std::string && value);
    89148
    90149    CharsetOperatorKind getCharsetOperator();
     
    100159    codepoint_t parse_octal_codepoint(int mindigits, int maxdigits);
    101160
    102     inline void throw_incomplete_expression_error_if_end_of_stream() const;
    103 
    104161    // CC insertion dependent on case-insensitive flag.
    105162    Name * createCC(const codepoint_t cp);
     
    111168private:
    112169
    113     cursor_t                    _cursor;
    114     const cursor_t              _end;
     170    Cursor                      mCursor;
    115171    ModeFlagSet                 fModeFlagSet;
    116172    bool                        fNested;
Note: See TracChangeset for help on using the changeset viewer.