Ignore:
Timestamp:
Jan 15, 2018, 4:48:02 PM (15 months ago)
Author:
nmedfort
Message:

Revised RE_Minimizer to use alphabets + minor optimizations to RE functions

File:
1 edited

Legend:

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

    r5814 r5835  
    3333public:
    3434
    35     static LLVM_ATTRIBUTE_NORETURN void ParseFailure(std::string errmsg);
    36 
    3735    static RE * parse(const std::string &input_string, ModeFlagSet initialFlags, RE_Syntax syntax = RE_Syntax::PCRE, bool ByteMode = false);
    3836
     
    4644
    4745    struct Cursor {
     46        friend class RE_Parser;
    4847
    4948        inline Cursor & operator++() {
    5049            if (LLVM_UNLIKELY(mCursor == mEnd)) {
    51                 ParseFailure("Incomplete regular expression!");
     50                IncompleteRegularExpression();
    5251            }
    5352            ++mCursor;
     
    5756        inline Cursor operator++(int) {
    5857            if (LLVM_UNLIKELY(mCursor == mEnd)) {
    59                 ParseFailure("Incomplete regular expression!");
     58                IncompleteRegularExpression();
    6059            }
    6160            Cursor tmp(*this);
     
    8685            return mCursor;
    8786        }
    88        
    89        
    90         Cursor(const std::string & expression) : mCursor(expression.cbegin()), mEnd(expression.cend()) {}
    91         Cursor(const Cursor & cursor) : mCursor(cursor.mCursor), mEnd(cursor.mEnd) {}
     87               
     88        Cursor(const std::string & expression) : mCursor(expression.cbegin()), mEnd(expression.cend()), mStart(expression.cbegin()) {}
     89        Cursor(const Cursor & cursor) : mCursor(cursor.mCursor), mEnd(cursor.mEnd), mStart(cursor.mStart) {}
    9290        inline Cursor & operator=(const Cursor & cursor) {
    9391            mCursor = cursor.mCursor;
     
    9593            return *this;
    9694        }
     95    private:       
     96        LLVM_ATTRIBUTE_NORETURN void IncompleteRegularExpression();
     97        LLVM_ATTRIBUTE_NORETURN void ParseFailure(const std::string & errmsg);
    9798    private:
    9899        cursor_t    mCursor;
    99100        cursor_t    mEnd;
     101        cursor_t    mStart;
    100102    };
    101103
     
    225227    RE * parse_escaped_char_item();
    226228   
     229    RE * makeAtomicGroup(RE * r);
     230    RE * makeBranchResetGroup(RE * r);
     231
    227232    codepoint_t parse_codepoint();
    228233
     
    236241
    237242    static std::string canonicalize(const cursor_t begin, const cursor_t end);
     243
    238244    bool isCharAhead(char c);
     245
     246    LLVM_ATTRIBUTE_NORETURN void InvalidUTF8Encoding();
     247
     248    LLVM_ATTRIBUTE_NORETURN void ParseFailure(const std::string & errmsg) {
     249        mCursor.ParseFailure(errmsg);
     250    }
    239251
    240252protected:
     
    245257    Cursor                      mCursor;
    246258    unsigned                    mCaptureGroupCount;
     259    RE_Syntax                   mReSyntax;
    247260    NameMap                     mNameMap;
    248261    Memoizer                    mMemoizer;
    249     RE_Syntax                   mReSyntax;
    250262};
    251263
Note: See TracChangeset for help on using the changeset viewer.