Ignore:
Timestamp:
Nov 24, 2014, 1:24:33 PM (4 years ago)
Author:
cameron
Message:

Add fModeFlags into parsing object, set/save/restore with groups.

File:
1 edited

Legend:

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

    r4311 r4312  
    3030RE * RE_Parser::parse(const std::string & regular_expression) {
    3131    RE_Parser parser(regular_expression);
    32     RE * re = parser.parse_alt();
     32    RE * re = parser.parse_RE();
    3333    if (re == nullptr) {
    3434        throw ParseFailure("An unexpected parsing error occurred!");
     
    4040: _cursor(regular_expression.begin())
    4141, _end(regular_expression.end())
     42, fModeFlagSet(0)
    4243{
    4344
     
    154155    RE * subexpr;
    155156    RE * group_expr;
     157    ModeFlagSet savedModeFlags = fModeFlagSet;
    156158    throw_incomplete_expression_error_if_end_of_stream();
    157159    if (*_cursor == '?') {
     
    208210            case '-': case 'd' : case 'i': case 'm': case 's': case 'x': {
    209211                bool negateMode = false;
    210                 unsigned modeBit;
    211                 unsigned newModeFlags;
     212                ModeFlagType modeBit;
    212213                while (_cursor != _end && *_cursor != ')' && *_cursor != ':') {
    213214                    if (*_cursor == '-') {
     
    225226                    }
    226227                    if (negateMode) {
    227                         newModeFlags &= ~modeBit;
     228                        fModeFlagSet &= ~modeBit;
    228229                        negateMode = false;  // for next flag
    229230                    }
    230                     else newModeFlags |= modeBit;
     231                    else fModeFlagSet |= modeBit;
    231232                }
    232233                throw_incomplete_expression_error_if_end_of_stream();
    233                 std::cerr << "newModeFlags " << newModeFlags << " ignored.\n";
     234                std::cerr << "New fModeFlagSet " << fModeFlagSet << " ignored.\n";
    234235                if (*_cursor == ':') {
    235236                    ++_cursor;
     
    238239                else {  // if *_cursor == ')'
    239240                    ++_cursor;
     241                    // return immediately without restoring mode flags
    240242                    return parse_next_item();
    241243                }
     
    250252        group_expr = parse_alt();
    251253    }
     254    // Restore mode flags.
     255    fModeFlagSet = savedModeFlags;
    252256    if (_cursor == _end || *_cursor++ != ')')
    253257        throw ParseFailure("Closing paren required.");
Note: See TracChangeset for help on using the changeset viewer.