peg2 0.1.15 copy "peg2: ^0.1.15" to clipboard
peg2: ^0.1.15 copied to clipboard

discontinuedreplaced by: peg
outdated

PEG+ (Parsing expression grammar) parser source code generator, command line tool.

example/example.dart

// Generated by 'peg2'
// https://pub.dev/packages/peg2

void main() {
  final parser = ExampleParser();
  final result = parser.parse(_text);
  if (parser.error != null) {
    throw parser.error;
  }

  print(result);
}

final _text = '''
{"foo": "🚀start"}
''';

class ExampleParser {
  static const _eof = 0x110000;

  FormatException error;

  int _c;

  List<String> _failures;

  int _fcount;

  int _fposEnd;

  int _fposMax;

  int _fposStart;

  List<int> _input;

  List<bool> _memoizable;

  List<List<_Memo>> _memos;

  var _mresult;

  int _pos;

  bool _predicate;

  dynamic _result;

  bool _success;

  String _text;

  List<int> _trackCid;

  List<int> _trackPos;

  dynamic parse(String text) {
    if (text == null) {
      throw ArgumentError.notNull('text');
    }
    _text = text;
    _input = _toRunes(text);
    _reset();
    final result = _parseJson(0, true);
    _buildError();
    _failures = null;
    _input = null;
    return result;
  }

  void _buildError() {
    if (_success) {
      error = null;
      return;
    }

    String escape(int c) {
      switch (c) {
        case 10:
          return r'\n';
        case 13:
          return r'\r';
        case 09:
          return r'\t';
        case _eof:
          return '';
      }
      return String.fromCharCode(c);
    }

    String getc(int position) {
      if (position < _input.length) {
        return "'${escape(_input[position])}'";
      }
      return 'end of file';
    }

    final temp = _failures.take(_fcount).toList();
    temp.sort((e1, e2) => e1.compareTo(e2));
    final terminals = temp.toSet();
    final hasMalformed = _fposStart != _fposMax;
    if (terminals.isNotEmpty) {
      if (!hasMalformed) {
        final sb = StringBuffer();
        sb.write('Expected ');
        sb.write(terminals.join(', '));
        sb.write(' but found ');
        sb.write(getc(_fposStart));
        final message = sb.toString();
        error = FormatException(message, _text, _fposStart);
      } else {
        final reason = _fposMax < _input.length ? 'Malformed' : 'Unterminated';
        final sb = StringBuffer();
        sb.write(reason);
        sb.write(' ');
        sb.write(terminals.join(', '));
        final message = sb.toString();
        error = FormatException(message, _text, _fposStart);
      }
    } else {
      final sb = StringBuffer();
      sb.write('Unexpected character ');
      sb.write(getc(_fposStart));
      final message = sb.toString();
      error = FormatException(message, _text, _fposStart);
    }
  }

  void _fail(int start, String name) {
    if (_fposStart < start) {
      _fposStart = start;
      _fposMax = _fposEnd;
      _fcount = 0;
    } else if (_fposMax < _fposEnd) {
      _fposStart = start;
      _fposMax = _fposEnd;
      _fcount = 0;
    }

    if (_fposStart == start && _fposEnd == _fposMax) {
      if (_fcount >= _failures.length) {
        _failures.length += 20;
      }

      _failures[_fcount++] = name;
    }
  }

  int _matchRanges(List<int> ranges) {
    int result;
    _success = false;
    for (var i = 0; i < ranges.length; i += 2) {
      if (ranges[i] <= _c) {
        if (ranges[i + 1] >= _c) {
          result = _c;
          _c = _input[_pos += _c <= 0xffff ? 1 : 2];
          _success = true;
          break;
        }
      } else {
        break;
      }
    }

    if (!_success && _fposEnd < _pos) {
      _fposEnd = _pos;
    }

    return result;
  }

  String _matchString(String text) {
    String result;
    final length = text.length;
    final rest = _text.length - _pos;
    final count = length > rest ? rest : length;
    var pos = _pos;
    var i = 0;
    for (; i < count; i++, pos++) {
      if (text.codeUnitAt(i) != _text.codeUnitAt(pos)) {
        break;
      }
    }

    if (i == length) {
      _c = _input[_pos += length];
      _success = true;
      result = text;
    } else {
      _success = false;
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }

    return result;
  }

  bool _memoized(int id, int cid) {
    final memos = _memos[_pos];
    if (memos != null) {
      for (var i = 0; i < memos.length; i++) {
        final memo = memos[i];
        if (memo.id == id) {
          _pos = memo.pos;
          _mresult = memo.result;
          _success = memo.success;
          _c = _input[_pos];
          return true;
        }
      }
    }

    if (_memoizable[cid] != null) {
      return false;
    }

    var lastCid = _trackCid[id];
    var lastPos = _trackPos[id];
    _trackCid[id] = cid;
    _trackPos[id] = _pos;
    if (lastCid == null) {
      return false;
    }

    if (lastPos == _pos) {
      if (lastCid != cid) {
        _memoizable[lastCid] = true;
        _memoizable[cid] = false;
      }
    }

    return false;
  }

  void _memoize(int id, int pos, result) {
    var memos = _memos[pos];
    if (memos == null) {
      memos = [];
      _memos[pos] = memos;
    }

    final memo = _Memo(
      id: id,
      pos: _pos,
      result: result,
      success: _success,
    );

    memos.add(memo);
  }

  void _reset() {
    _c = _input[0];
    _failures = [];
    _failures.length = 20;
    _fcount = 0;
    _fposEnd = -1;
    _fposMax = -1;
    _fposStart = -1;
    _memoizable = [];
    _memoizable.length = 187;
    _memos = [];
    _memos.length = _input.length + 1;
    _pos = 0;
    _predicate = false;
    _trackCid = [];
    _trackCid.length = 187;
    _trackPos = [];
    _trackPos.length = 187;
  }

  List<int> _toRunes(String source) {
    final length = source.length;
    final result = List<int>(length + 1);
    for (var pos = 0; pos < length;) {
      int c;
      final start = pos;
      final leading = source.codeUnitAt(pos++);
      if ((leading & 0xFC00) == 0xD800 && pos < length) {
        final trailing = source.codeUnitAt(pos);
        if ((trailing & 0xFC00) == 0xDC00) {
          c = 0x10000 + ((leading & 0x3FF) << 10) + (trailing & 0x3FF);
          pos++;
        } else {
          c = leading;
        }
      } else {
        c = leading;
      }

      result[start] = c;
    }

    result[length] = 0x110000;
    return result;
  }

  dynamic _parseJson(int $0, bool $1) {
    dynamic $2;
    dynamic $3;
    dynamic $4;
    var $5 = _c;
    var $6 = _pos;
    List<int> $7;
    var $8 = _pos;
    if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
      var $9 = _parse_leading_spaces(3, false);
      $7 = $9;
    } else {
      _success = true;
    }
    _success = true;
    var $10 = _parseValue(4, $1);
    if (_success) {
      dynamic $11;
      var $12 = _pos;
      if (_c >= 0 && _c <= 1114112) {
        var $13 = _parse_end_of_file(5, false);
        $11 = $13;
      } else {
        _success = false;
        _fail($12, '\'end of file\'');
      }
      if (_success) {
        $4 = $10;
      }
    }
    // NOP;
    if (!_success) {
      _c = $5;
      _pos = $6;
    }
    $3 = $4;
    $2 = $3;
    return $2;
  }

  dynamic _parseValue(int $0, bool $1) {
    dynamic $2;
    dynamic $3;
    for (;;) {
      List $4;
      var $5 = _parseArray(8, $1);
      if (_success) {
        $4 = $5;
        $3 = $4;
        break;
      }
      // NOP;
      dynamic $6;
      dynamic $7;
      var $8 = _pos;
      if (_c == 102) {
        var $9 = _parse_false(10, $1);
        $7 = $9;
      } else {
        _success = false;
        _fail($8, '\'false\'');
      }
      if (_success) {
        $6 = $7;
        $3 = $6;
        break;
      }
      // NOP;
      dynamic $10;
      dynamic $11;
      var $12 = _pos;
      if (_c == 110) {
        var $13 = _parse_null(12, $1);
        $11 = $13;
      } else {
        _success = false;
        _fail($12, '\'null\'');
      }
      if (_success) {
        $10 = $11;
        $3 = $10;
        break;
      }
      // NOP;
      dynamic $14;
      dynamic $15;
      var $16 = _pos;
      if (_c == 116) {
        var $17 = _parse_true(14, $1);
        $15 = $17;
      } else {
        _success = false;
        _fail($16, '\'true\'');
      }
      if (_success) {
        $14 = $15;
        $3 = $14;
        break;
      }
      // NOP;
      Map<String, dynamic> $18;
      var $19 = _parseObject(16, $1);
      if (_success) {
        $18 = $19;
        $3 = $18;
        break;
      }
      // NOP;
      num $20;
      num $21;
      var $22 = _pos;
      if (_c == 45 || _c >= 48 && _c <= 57) {
        var $23 = _parse_number(18, $1);
        $21 = $23;
      } else {
        _success = false;
        _fail($22, '\'number\'');
      }
      if (_success) {
        $20 = $21;
        $3 = $20;
        break;
      }
      // NOP;
      String $24;
      String $25;
      var $26 = _pos;
      if (_c == 34) {
        var $27 = _parse_string(20, $1);
        $25 = $27;
      } else {
        _success = false;
        _fail($26, '\'string\'');
      }
      if (_success) {
        $24 = $25;
        $3 = $24;
      }
      // NOP;
      break;
    }
    $2 = $3;
    return $2;
  }

  List _parseArray(int $0, bool $1) {
    List $2;
    List $3;
    List $4;
    var $5 = _c;
    var $6 = _pos;
    String $7;
    var $8 = _pos;
    if (_c == 91) {
      var $9 = _parse_$LeftSquareBracket(23, false);
      $7 = $9;
    } else {
      _success = false;
      _fail($8, '\'[\'');
    }
    if (_success) {
      var $10 = _parseValues(25, $1);
      _success = true;
      String $11;
      var $12 = _pos;
      if (_c == 93) {
        var $13 = _parse_$RightSquareBracket(26, false);
        $11 = $13;
      } else {
        _success = false;
        _fail($12, '\']\'');
      }
      if (_success) {
        var v = $10;
        List $$;
        $$ = v ?? [];
        $4 = $$;
      }
      // NOP;
    }
    if (!_success) {
      _c = $5;
      _pos = $6;
    }
    $3 = $4;
    $2 = $3;
    return $2;
  }

  List _parseValues(int $0, bool $1) {
    List $2;
    List $3;
    List $4;
    var $5 = _c;
    var $6 = _pos;
    var $7 = _parseValue(29, $1);
    if (_success) {
      List $8;
      if ($1) {
        $8 = [];
      }
      for (;;) {
        dynamic $9;
        dynamic $10;
        var $11 = _c;
        var $12 = _pos;
        String $13;
        var $14 = _pos;
        if (_c == 44) {
          var $15 = _parse_$Comma(33, false);
          $13 = $15;
        } else {
          _success = false;
          _fail($14, '\',\'');
        }
        if (_success) {
          var $16 = _parseValue(34, $1);
          if (_success) {
            $10 = $16;
          }
        }
        if (!_success) {
          _c = $11;
          _pos = $12;
        }
        $9 = $10;
        if (!_success) {
          break;
        }
        if ($1) {
          $8.add($9);
        }
      }
      _success = true;
      {
        var v = $7;
        var n = $8;
        List $$;
        $$ = [v, ...n];
        $4 = $$;
      }
      // NOP;
    }
    if (!_success) {
      _c = $5;
      _pos = $6;
    }
    $3 = $4;
    $2 = $3;
    return $2;
  }

  Map<String, dynamic> _parseObject(int $0, bool $1) {
    Map<String, dynamic> $2;
    Map<String, dynamic> $3;
    Map<String, dynamic> $4;
    var $5 = _c;
    var $6 = _pos;
    String $7;
    var $8 = _pos;
    if (_c == 123) {
      var $9 = _parse_$LeftBrace(37, false);
      $7 = $9;
    } else {
      _success = false;
      _fail($8, '\'{\'');
    }
    if (_success) {
      var $10 = _parseMembers(39, $1);
      _success = true;
      String $11;
      var $12 = _pos;
      if (_c == 125) {
        var $13 = _parse_$RightBrace(40, false);
        $11 = $13;
      } else {
        _success = false;
        _fail($12, '\'}\'');
      }
      if (_success) {
        var m = $10;
        Map<String, dynamic> $$;
        $$ = <String, dynamic>{}..addEntries(m ?? []);
        $4 = $$;
      }
      // NOP;
    }
    if (!_success) {
      _c = $5;
      _pos = $6;
    }
    $3 = $4;
    $2 = $3;
    return $2;
  }

  List<MapEntry<String, dynamic>> _parseMembers(int $0, bool $1) {
    List<MapEntry<String, dynamic>> $2;
    List<MapEntry<String, dynamic>> $3;
    List<MapEntry<String, dynamic>> $4;
    var $5 = _c;
    var $6 = _pos;
    var $7 = _parseMember(43, $1);
    if (_success) {
      List<MapEntry<String, dynamic>> $8;
      if ($1) {
        $8 = [];
      }
      for (;;) {
        MapEntry<String, dynamic> $9;
        MapEntry<String, dynamic> $10;
        var $11 = _c;
        var $12 = _pos;
        String $13;
        var $14 = _pos;
        if (_c == 44) {
          var $15 = _parse_$Comma(47, false);
          $13 = $15;
        } else {
          _success = false;
          _fail($14, '\',\'');
        }
        if (_success) {
          var $16 = _parseMember(48, $1);
          if (_success) {
            $10 = $16;
          }
        }
        if (!_success) {
          _c = $11;
          _pos = $12;
        }
        $9 = $10;
        if (!_success) {
          break;
        }
        if ($1) {
          $8.add($9);
        }
      }
      _success = true;
      {
        var m = $7;
        var n = $8;
        List<MapEntry<String, dynamic>> $$;
        $$ = [m, ...n];
        $4 = $$;
      }
      // NOP;
    }
    if (!_success) {
      _c = $5;
      _pos = $6;
    }
    $3 = $4;
    $2 = $3;
    return $2;
  }

  MapEntry<String, dynamic> _parseMember(int $0, bool $1) {
    MapEntry<String, dynamic> $2;
    MapEntry<String, dynamic> $3;
    MapEntry<String, dynamic> $4;
    var $5 = _c;
    var $6 = _pos;
    String $7;
    var $8 = _pos;
    if (_c == 34) {
      var $9 = _parse_string(51, $1);
      $7 = $9;
    } else {
      _success = false;
      _fail($8, '\'string\'');
    }
    if (_success) {
      String $10;
      var $11 = _pos;
      if (_c == 58) {
        var $12 = _parse_$Colon(52, false);
        $10 = $12;
      } else {
        _success = false;
        _fail($11, '\':\'');
      }
      if (_success) {
        var $13 = _parseValue(53, $1);
        if (_success) {
          var k = $7;
          var v = $13;
          MapEntry<String, dynamic> $$;
          $$ = MapEntry(k, v);
          $4 = $$;
        }
      }
    }
    if (!_success) {
      _c = $5;
      _pos = $6;
    }
    $3 = $4;
    $2 = $3;
    return $2;
  }

  dynamic _parse_end_of_file(int $0, bool $1) {
    dynamic $2;
    dynamic $3;
    _fposEnd = -1;
    var $4 = _pos;
    dynamic $5;
    var $6 = _c;
    var $7 = _pos;
    var $8 = _predicate;
    var $9 = $1;
    _predicate = true;
    $1 = false;
    int $10;
    _success = _c < _eof;
    if (_success) {
      $10 = _c;
      _c = _input[_pos += _c <= 65535 ? 1 : 2];
    } else {
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    var $11;
    _success = !_success;
    _c = $6;
    _pos = $7;
    _predicate = $8;
    $1 = $9;
    if (_success) {
      $5 = $11;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\'end of file\'');
    }
    $2 = $3;
    return $2;
  }

  dynamic _parse_false(int $0, bool $1) {
    dynamic $2;
    dynamic $3;
    _fposEnd = -1;
    var $4 = _pos;
    dynamic $5;
    var $6 = _c;
    var $7 = _pos;
    String $8;
    if (_c == 102) {
      $8 = _matchString('false');
    } else {
      _success = false;
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      List<int> $9;
      var $10 = _pos;
      if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
        var $11 = _parse$$spacing(61, false);
        $9 = $11;
      } else {
        _success = true;
      }
      if (_success) {
        dynamic $$;
        $$ = false;
        $5 = $$;
      }
    }
    if (!_success) {
      _c = $6;
      _pos = $7;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\'false\'');
    }
    $2 = $3;
    return $2;
  }

  List<int> _parse_leading_spaces(int $0, bool $1) {
    List<int> $2;
    List<int> $3;
    _fposEnd = -1;
    var $4 = _pos;
    List<int> $5;
    List<int> $6;
    var $7 = _pos;
    if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
      var $8 = _parse$$spacing(64, false);
      $6 = $8;
    } else {
      _success = true;
    }
    if (_success) {
      $5 = $6;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\'leading spaces\'');
    }
    $2 = $3;
    return $2;
  }

  dynamic _parse_null(int $0, bool $1) {
    dynamic $2;
    dynamic $3;
    _fposEnd = -1;
    var $4 = _pos;
    dynamic $5;
    var $6 = _c;
    var $7 = _pos;
    String $8;
    if (_c == 110) {
      $8 = _matchString('null');
    } else {
      _success = false;
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      List<int> $9;
      var $10 = _pos;
      if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
        var $11 = _parse$$spacing(68, false);
        $9 = $11;
      } else {
        _success = true;
      }
      if (_success) {
        dynamic $$;
        $$ = null;
        $5 = $$;
      }
    }
    if (!_success) {
      _c = $6;
      _pos = $7;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\'null\'');
    }
    $2 = $3;
    return $2;
  }

  dynamic _parse_true(int $0, bool $1) {
    dynamic $2;
    dynamic $3;
    _fposEnd = -1;
    var $4 = _pos;
    dynamic $5;
    var $6 = _c;
    var $7 = _pos;
    String $8;
    if (_c == 116) {
      $8 = _matchString('true');
    } else {
      _success = false;
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      List<int> $9;
      var $10 = _pos;
      if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
        var $11 = _parse$$spacing(72, false);
        $9 = $11;
      } else {
        _success = true;
      }
      if (_success) {
        dynamic $$;
        $$ = true;
        $5 = $$;
      }
    }
    if (!_success) {
      _c = $6;
      _pos = $7;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\'true\'');
    }
    $2 = $3;
    return $2;
  }

  String _parse_string(int $0, bool $1) {
    String $2;
    String $3;
    _fposEnd = -1;
    var $4 = _pos;
    String $5;
    var $6 = _c;
    var $7 = _pos;
    String $8;
    _success = _c == 34;
    if (_success) {
      $8 = '\"';
      _c = _input[++_pos];
    } else {
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      List<int> $9;
      if ($1) {
        $9 = [];
      }
      for (;;) {
        int $10;
        var $11 = _pos;
        if (_c >= 32 && _c <= 33 || _c >= 35 && _c <= 1114111) {
          var $12 = _parse$$char(77, $1);
          $10 = $12;
        } else {
          _success = false;
        }
        if (!_success) {
          break;
        }
        if ($1) {
          $9.add($10);
        }
      }
      _success = true;
      String $13;
      _success = _c == 34;
      if (_success) {
        $13 = '\"';
        _c = _input[++_pos];
      } else {
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        List<int> $14;
        var $15 = _pos;
        if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
          var $16 = _parse$$spacing(79, false);
          $14 = $16;
        } else {
          _success = true;
        }
        if (_success) {
          var c = $9;
          String $$;
          $$ = String.fromCharCodes(c);
          $5 = $$;
        }
      }
      // NOP;
    }
    if (!_success) {
      _c = $6;
      _pos = $7;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\'string\'');
    }
    $2 = $3;
    return $2;
  }

  num _parse_number(int $0, bool $1) {
    num $2;
    num $3;
    _fposEnd = -1;
    var $4 = _pos;
    num $5;
    var $6 = _c;
    var $7 = _pos;
    String $8;
    var $9 = _pos;
    var $10 = $1;
    $1 = false;
    int $11;
    int $12;
    var $13 = _c;
    var $14 = _pos;
    int $15;
    if (_c == 45) {
      _success = true;
      $15 = _c;
      _c = _input[_pos += _c <= 65535 ? 1 : 2];
    } else {
      _success = false;
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    _success = true;
    int $16;
    for (;;) {
      int $17;
      int $18;
      if (_c == 48) {
        _success = true;
        $18 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        $17 = $18;
        $16 = $17;
        break;
      }
      // NOP;
      int $19;
      var $20 = _c;
      var $21 = _pos;
      int $22;
      if (_c >= 49 && _c <= 57) {
        _success = true;
        $22 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        List<int> $23;
        for (;;) {
          int $24;
          if (_c >= 48 && _c <= 57) {
            _success = true;
            $24 = _c;
            _c = _input[_pos += _c <= 65535 ? 1 : 2];
          } else {
            _success = false;
            if (_fposEnd < _pos) {
              _fposEnd = _pos;
            }
          }
          if (!_success) {
            break;
          }
        }
        _success = true;
        $19 = $22;
        // NOP;
      }
      if (!_success) {
        _c = $20;
        _pos = $21;
      } else {
        $16 = $19;
      }
      // NOP;
      break;
    }
    if (_success) {
      int $25;
      int $26;
      var $27 = _c;
      var $28 = _pos;
      int $29;
      if (_c == 46) {
        _success = true;
        $29 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        List<int> $30;
        var $31 = false;
        for (;;) {
          int $32;
          if (_c >= 48 && _c <= 57) {
            _success = true;
            $32 = _c;
            _c = _input[_pos += _c <= 65535 ? 1 : 2];
          } else {
            _success = false;
            if (_fposEnd < _pos) {
              _fposEnd = _pos;
            }
          }
          if (!_success) {
            _success = $31;
            if (!_success) {
              $30 = null;
            }
            break;
          }
          $31 = true;
        }
        if (_success) {
          $26 = $29;
        }
      }
      if (!_success) {
        _c = $27;
        _pos = $28;
      }
      $25 = $26;
      _success = true;
      int $33;
      int $34;
      var $35 = _c;
      var $36 = _pos;
      int $37;
      if (_c == 69 || _c == 101) {
        _success = true;
        $37 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        List<int> $38;
        var $39 = false;
        for (;;) {
          int $40;
          if (_c == 32 || _c >= 43 && _c <= 93) {
            _success = true;
            $40 = _c;
            _c = _input[_pos += _c <= 65535 ? 1 : 2];
          } else {
            _success = false;
            if (_fposEnd < _pos) {
              _fposEnd = _pos;
            }
          }
          if (!_success) {
            _success = $39;
            if (!_success) {
              $38 = null;
            }
            break;
          }
          $39 = true;
        }
        if (_success) {
          $34 = $37;
        }
      }
      if (!_success) {
        _c = $35;
        _pos = $36;
      }
      $33 = $34;
      _success = true;
      $12 = $15;
      // NOP;
      // NOP;
    }
    // NOP;
    if (!_success) {
      _c = $13;
      _pos = $14;
    }
    $11 = $12;
    if (_success) {
      $8 = _text.substring($9, _pos);
    }
    $1 = $10;
    if (_success) {
      List<int> $41;
      var $42 = _pos;
      if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
        var $43 = _parse$$spacing(106, false);
        $41 = $43;
      } else {
        _success = true;
      }
      if (_success) {
        var n = $8;
        num $$;
        $$ = num.parse(n);
        $5 = $$;
      }
    }
    if (!_success) {
      _c = $6;
      _pos = $7;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\'number\'');
    }
    $2 = $3;
    return $2;
  }

  String _parse_$LeftBrace(int $0, bool $1) {
    String $2;
    String $3;
    _fposEnd = -1;
    var $4 = _pos;
    String $5;
    var $6 = _c;
    var $7 = _pos;
    String $8;
    _success = _c == 123;
    if (_success) {
      $8 = '{';
      _c = _input[++_pos];
    } else {
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      List<int> $9;
      var $10 = _pos;
      if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
        var $11 = _parse$$spacing(110, false);
        $9 = $11;
      } else {
        _success = true;
      }
      if (_success) {
        $5 = $8;
      }
    }
    if (!_success) {
      _c = $6;
      _pos = $7;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\'{\'');
    }
    $2 = $3;
    return $2;
  }

  String _parse_$RightBrace(int $0, bool $1) {
    String $2;
    String $3;
    _fposEnd = -1;
    var $4 = _pos;
    String $5;
    var $6 = _c;
    var $7 = _pos;
    String $8;
    _success = _c == 125;
    if (_success) {
      $8 = '}';
      _c = _input[++_pos];
    } else {
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      List<int> $9;
      var $10 = _pos;
      if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
        var $11 = _parse$$spacing(114, false);
        $9 = $11;
      } else {
        _success = true;
      }
      if (_success) {
        $5 = $8;
      }
    }
    if (!_success) {
      _c = $6;
      _pos = $7;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\'}\'');
    }
    $2 = $3;
    return $2;
  }

  String _parse_$LeftSquareBracket(int $0, bool $1) {
    String $2;
    String $3;
    _fposEnd = -1;
    var $4 = _pos;
    String $5;
    var $6 = _c;
    var $7 = _pos;
    String $8;
    _success = _c == 91;
    if (_success) {
      $8 = '[';
      _c = _input[++_pos];
    } else {
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      List<int> $9;
      var $10 = _pos;
      if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
        var $11 = _parse$$spacing(118, false);
        $9 = $11;
      } else {
        _success = true;
      }
      if (_success) {
        $5 = $8;
      }
    }
    if (!_success) {
      _c = $6;
      _pos = $7;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\'[\'');
    }
    $2 = $3;
    return $2;
  }

  String _parse_$RightSquareBracket(int $0, bool $1) {
    String $2;
    String $3;
    _fposEnd = -1;
    var $4 = _pos;
    String $5;
    var $6 = _c;
    var $7 = _pos;
    String $8;
    _success = _c == 93;
    if (_success) {
      $8 = ']';
      _c = _input[++_pos];
    } else {
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      List<int> $9;
      var $10 = _pos;
      if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
        var $11 = _parse$$spacing(122, false);
        $9 = $11;
      } else {
        _success = true;
      }
      if (_success) {
        $5 = $8;
      }
    }
    if (!_success) {
      _c = $6;
      _pos = $7;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\']\'');
    }
    $2 = $3;
    return $2;
  }

  String _parse_$Comma(int $0, bool $1) {
    String $2;
    String $3;
    _fposEnd = -1;
    var $4 = _pos;
    String $5;
    var $6 = _c;
    var $7 = _pos;
    String $8;
    _success = _c == 44;
    if (_success) {
      $8 = ',';
      _c = _input[++_pos];
    } else {
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      List<int> $9;
      var $10 = _pos;
      if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
        var $11 = _parse$$spacing(126, false);
        $9 = $11;
      } else {
        _success = true;
      }
      if (_success) {
        $5 = $8;
      }
    }
    if (!_success) {
      _c = $6;
      _pos = $7;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\',\'');
    }
    $2 = $3;
    return $2;
  }

  String _parse_$Colon(int $0, bool $1) {
    String $2;
    String $3;
    _fposEnd = -1;
    var $4 = _pos;
    String $5;
    var $6 = _c;
    var $7 = _pos;
    String $8;
    _success = _c == 58;
    if (_success) {
      $8 = ':';
      _c = _input[++_pos];
    } else {
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      List<int> $9;
      var $10 = _pos;
      if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
        var $11 = _parse$$spacing(130, false);
        $9 = $11;
      } else {
        _success = true;
      }
      if (_success) {
        $5 = $8;
      }
    }
    if (!_success) {
      _c = $6;
      _pos = $7;
    }
    $3 = $5;
    if (!_success) {
      _fail($4, '\':\'');
    }
    $2 = $3;
    return $2;
  }

  int _parse$$digit(int $0, bool $1) {
    int $2;
    int $3;
    int $4;
    int $5;
    if (_c >= 48 && _c <= 57) {
      _success = true;
      $5 = _c;
      _c = _input[_pos += _c <= 65535 ? 1 : 2];
    } else {
      _success = false;
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      int $$;
      $$ = $$ - 48;
      $4 = $$;
    }
    $3 = $4;
    $2 = $3;
    return $2;
  }

  int _parse$$digit1_9(int $0, bool $1) {
    int $2;
    int $3;
    int $4;
    int $5;
    if (_c >= 49 && _c <= 57) {
      _success = true;
      $5 = _c;
      _c = _input[_pos += _c <= 65535 ? 1 : 2];
    } else {
      _success = false;
      if (_fposEnd < _pos) {
        _fposEnd = _pos;
      }
    }
    if (_success) {
      int $$;
      $$ = $$ - 48;
      $4 = $$;
    }
    $3 = $4;
    $2 = $3;
    return $2;
  }

  int _parse$$char(int $0, bool $1) {
    int $2;
    int $3;
    for (;;) {
      int $4;
      var $5 = _c;
      var $6 = _pos;
      int $7;
      if (_c == 92) {
        _success = true;
        $7 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        int $8;
        var $9 = _pos;
        if (_c == 34 ||
            _c == 47 ||
            _c == 92 ||
            _c == 98 ||
            _c == 102 ||
            _c == 110 ||
            _c == 114 ||
            _c >= 116 && _c <= 117) {
          var $10 = _parse$$escaped(140, $1);
          $8 = $10;
        } else {
          _success = false;
        }
        if (_success) {
          $4 = $8;
        }
      }
      if (!_success) {
        _c = $5;
        _pos = $6;
      } else {
        $3 = $4;
        break;
      }
      // NOP;
      int $11;
      int $12;
      var $13 = _pos;
      if (_c >= 32 && _c <= 33 ||
          _c >= 35 && _c <= 91 ||
          _c >= 93 && _c <= 1114111) {
        var $14 = _parse$$unescaped(142, $1);
        $12 = $14;
      } else {
        _success = false;
      }
      if (_success) {
        $11 = $12;
        $3 = $11;
      }
      // NOP;
      break;
    }
    $2 = $3;
    return $2;
  }

  int _parse$$escaped(int $0, bool $1) {
    int $2;
    int $3;
    for (;;) {
      int $4;
      int $5;
      if (_c == 34) {
        _success = true;
        $5 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        $4 = $5;
        $3 = $4;
        break;
      }
      // NOP;
      int $6;
      int $7;
      if (_c == 92) {
        _success = true;
        $7 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        $6 = $7;
        $3 = $6;
        break;
      }
      // NOP;
      int $8;
      int $9;
      if (_c == 47) {
        _success = true;
        $9 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        $8 = $9;
        $3 = $8;
        break;
      }
      // NOP;
      int $10;
      int $11;
      if (_c == 98) {
        _success = true;
        $11 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        int $$;
        $$ = 0x8;
        $10 = $$;
      }
      if (_success) {
        $3 = $10;
        break;
      }
      int $12;
      int $13;
      if (_c == 102) {
        _success = true;
        $13 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        int $$;
        $$ = 0xC;
        $12 = $$;
      }
      if (_success) {
        $3 = $12;
        break;
      }
      int $14;
      int $15;
      if (_c == 110) {
        _success = true;
        $15 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        int $$;
        $$ = 0xA;
        $14 = $$;
      }
      if (_success) {
        $3 = $14;
        break;
      }
      int $16;
      int $17;
      if (_c == 114) {
        _success = true;
        $17 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        int $$;
        $$ = 0xD;
        $16 = $$;
      }
      if (_success) {
        $3 = $16;
        break;
      }
      int $18;
      int $19;
      if (_c == 116) {
        _success = true;
        $19 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        int $$;
        $$ = 0x9;
        $18 = $$;
      }
      if (_success) {
        $3 = $18;
        break;
      }
      int $20;
      var $21 = _c;
      var $22 = _pos;
      int $23;
      if (_c == 117) {
        _success = true;
        $23 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        int $24;
        var $25 = _pos;
        if (_c >= 48 && _c <= 57 ||
            _c >= 65 && _c <= 70 ||
            _c >= 97 && _c <= 102) {
          var $26 = _parse$$hexdig4(162, $1);
          $24 = $26;
        } else {
          _success = false;
        }
        if (_success) {
          $20 = $24;
        }
      }
      if (!_success) {
        _c = $21;
        _pos = $22;
      } else {
        $3 = $20;
      }
      // NOP;
      break;
    }
    $2 = $3;
    return $2;
  }

  int _parse$$hexdig4(int $0, bool $1) {
    int $2;
    int $3;
    int $4;
    var $5 = _c;
    var $6 = _pos;
    int $7;
    var $8 = _pos;
    if (_c >= 48 && _c <= 57 || _c >= 65 && _c <= 70 || _c >= 97 && _c <= 102) {
      var $9 = _parse$$hexdig(165, $1);
      $7 = $9;
    } else {
      _success = false;
    }
    if (_success) {
      int $10;
      var $11 = _pos;
      if (_c >= 48 && _c <= 57 ||
          _c >= 65 && _c <= 70 ||
          _c >= 97 && _c <= 102) {
        var $12 = _parse$$hexdig(166, $1);
        $10 = $12;
      } else {
        _success = false;
      }
      if (_success) {
        int $13;
        var $14 = _pos;
        if (_c >= 48 && _c <= 57 ||
            _c >= 65 && _c <= 70 ||
            _c >= 97 && _c <= 102) {
          var $15 = _parse$$hexdig(167, $1);
          $13 = $15;
        } else {
          _success = false;
        }
        if (_success) {
          int $16;
          var $17 = _pos;
          if (_c >= 48 && _c <= 57 ||
              _c >= 65 && _c <= 70 ||
              _c >= 97 && _c <= 102) {
            var $18 = _parse$$hexdig(168, $1);
            $16 = $18;
          } else {
            _success = false;
          }
          if (_success) {
            var a = $7;
            var b = $10;
            var c = $13;
            var d = $16;
            int $$;
            $$ = a * 0xfff + b * 0xff + c * 0xf + d;
            $4 = $$;
          }
        }
      }
    }
    if (!_success) {
      _c = $5;
      _pos = $6;
    }
    $3 = $4;
    $2 = $3;
    return $2;
  }

  int _parse$$hexdig(int $0, bool $1) {
    int $2;
    int $3;
    for (;;) {
      int $4;
      int $5;
      if (_c >= 97 && _c <= 102) {
        _success = true;
        $5 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        int $$;
        $$ = $$ - 97;
        $4 = $$;
      }
      if (_success) {
        $3 = $4;
        break;
      }
      int $6;
      int $7;
      if (_c >= 65 && _c <= 70) {
        _success = true;
        $7 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        int $$;
        $$ = $$ - 65;
        $6 = $$;
      }
      if (_success) {
        $3 = $6;
        break;
      }
      int $8;
      int $9;
      if (_c >= 48 && _c <= 57) {
        _success = true;
        $9 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        int $$;
        $$ = $$ - 48;
        $8 = $$;
      }
      if (_success) {
        $3 = $8;
      }
      break;
    }
    $2 = $3;
    return $2;
  }

  int _parse$$unescaped(int $0, bool $1) {
    int $2;
    int $3;
    for (;;) {
      int $4;
      int $5;
      if (_c >= 32 && _c <= 33) {
        _success = true;
        $5 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        $4 = $5;
        $3 = $4;
        break;
      }
      // NOP;
      int $6;
      int $7;
      if (_c >= 35 && _c <= 91) {
        _success = true;
        $7 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        $6 = $7;
        $3 = $6;
        break;
      }
      // NOP;
      int $8;
      int $9;
      if (_c >= 93 && _c <= 1114111) {
        _success = true;
        $9 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (_success) {
        $8 = $9;
        $3 = $8;
      }
      // NOP;
      break;
    }
    $2 = $3;
    return $2;
  }

  List<int> _parse$$spacing(int $0, bool $1) {
    List<int> $2;
    List<int> $3;
    List<int> $4;
    List<int> $5;
    for (;;) {
      int $6;
      if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
        _success = true;
        $6 = _c;
        _c = _input[_pos += _c <= 65535 ? 1 : 2];
      } else {
        _success = false;
        if (_fposEnd < _pos) {
          _fposEnd = _pos;
        }
      }
      if (!_success) {
        break;
      }
    }
    _success = true;
    $4 = $5;
    // NOP;
    $3 = $4;
    $2 = $3;
    return $2;
  }
}

class _Memo {
  final int id;

  final int pos;

  final result;

  final bool success;

  _Memo({
    this.id,
    this.pos,
    this.result,
    this.success,
  });
}
// ignore_for_file: prefer_final_locals
// ignore_for_file: unused_element
// ignore_for_file: unused_field
// ignore_for_file: unused_local_variable
1
likes
0
pub points
0%
popularity

Publisher

unverified uploader

PEG+ (Parsing expression grammar) parser source code generator, command line tool.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

args, dart_style, lists, path, strings

More

Packages that depend on peg2