peg2 0.1.18 peg2: ^0.1.18 copied to clipboard
PEG+ (Parsing expression grammar) parser source code generator, command line tool.
// 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 = '''
{"rocket": "🚀 flies to the stars"}
''';
class ExampleParser {
static const _eof = 0x110000;
FormatException error;
int _c;
int _error;
List<String> _expected;
int _failure;
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();
_expected = 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 'end of file';
}
return String.fromCharCode(c);
}
String getc(int position) {
if (position < _text.length) {
return "'${escape(_input[position])}'";
}
return 'end of file';
}
String report(String message, String source, int start) {
if (start < 0 || start > source.length) {
start = null;
}
final sb = StringBuffer();
sb.write(message);
var line = 0;
var col = 0;
var lineStart = 0;
var started = false;
if (start != null) {
for (var i = 0; i < source.length; i++) {
final c = source.codeUnitAt(i);
if (!started) {
started = true;
lineStart = i;
line++;
col = 1;
} else {
col++;
}
if (c == 10) {
started = false;
}
if (start == i) {
break;
}
}
}
if (start == null) {
sb.writeln('.');
} else if (line == 0 || start == source.length) {
sb.write(' (at offset ');
sb.write(start);
sb.writeln('):');
} else {
sb.write(' (at line ');
sb.write(line);
sb.write(', column ');
sb.write(col);
sb.writeln('):');
}
List<int> escape(int c) {
switch (c) {
case 9:
return [92, 116];
case 10:
return [92, 110];
case 13:
return [92, 114];
default:
return [c];
}
}
const max = 70;
if (start != null) {
final c1 = <int>[];
final c2 = <int>[];
final half = max ~/ 2;
var cr = false;
for (var i = start; i >= lineStart && c1.length < half; i--) {
if (i == source.length) {
c2.insert(0, 94);
} else {
final c = source.codeUnitAt(i);
final escaped = escape(c);
c1.insertAll(0, escaped);
if (c == 10) {
cr = true;
}
final r = i == start ? 94 : 32;
for (var k = 0; k < escaped.length; k++) {
c2.insert(0, r);
}
}
}
for (var i = start + 1;
i < source.length && c1.length < max && !cr;
i++) {
final c = source.codeUnitAt(i);
final escaped = escape(c);
c1.addAll(escaped);
if (c == 10) {
break;
}
}
final text1 = String.fromCharCodes(c1);
final text2 = String.fromCharCodes(c2);
sb.writeln(text1);
sb.writeln(text2);
}
return sb.toString();
}
final temp = _expected.toList();
temp.sort((e1, e2) => e1.compareTo(e2));
final expected = temp.toSet();
final hasMalformed = false;
if (expected.isNotEmpty) {
if (!hasMalformed) {
final sb = StringBuffer();
sb.write('Expected ');
sb.write(expected.join(', '));
sb.write(' but found ');
sb.write(getc(_error));
final title = sb.toString();
final message = report(title, _text, _error);
error = FormatException(message);
} else {
final reason = _error == _text.length ? 'Unterminated' : 'Malformed';
final sb = StringBuffer();
sb.write(reason);
sb.write(' ');
sb.write(expected.join(', '));
final title = sb.toString();
final message = report(title, _text, _error);
error = FormatException(message);
}
} else {
final sb = StringBuffer();
sb.write('Unexpected character ');
sb.write(getc(_error));
final title = sb.toString();
final message = report(title, _text, _error);
error = FormatException(message);
}
}
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 && _error < _pos) {
_failure = _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 (_failure < _pos + i) {
_failure = _pos + i;
}
}
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;
}
final lastCid = _trackCid[id];
final 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];
_error = 0;
_expected = [];
_failure = -1;
_memoizable = [];
_memoizable.length = 181;
_memos = [];
_memos.length = _input.length + 1;
_pos = 0;
_predicate = false;
_trackCid = [];
_trackCid.length = 181;
_trackPos = [];
_trackPos.length = 181;
}
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;
final $4 = _c;
final $5 = _pos;
_parse_leading_spaces(3, false);
_success = true;
$2 = _parseValue(4, $1);
if (_success) {
_parse_end_of_file(5, false);
}
if (!_success) {
_c = $4;
_pos = $5;
if ($5 == _error) {
_expected.addAll(const [
'\'false\'',
'\'null\'',
'\'true\'',
'\'number\'',
'\'string\'',
'\'[\'',
'\'{\''
]);
}
}
return $2;
}
dynamic _parseValue(int $0, bool $1) {
dynamic $2;
final $4 = _c;
final $5 = _pos;
for (;;) {
$2 = _parseArray(8, $1);
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
$2 = _parse_false(10, $1);
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
$2 = _parse_null(12, $1);
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
$2 = _parse_true(14, $1);
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
$2 = _parseObject(16, $1);
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
$2 = _parse_number(18, $1);
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
$2 = _parse_string(20, $1);
if (_success) {
} else {
_c = $4;
_pos = $5;
}
break;
}
if (!_success) {
if ($5 == _error) {
_expected.addAll(const [
'\'false\'',
'\'null\'',
'\'true\'',
'\'number\'',
'\'string\'',
'\'[\'',
'\'{\''
]);
}
}
return $2;
}
List _parseArray(int $0, bool $1) {
List $2;
final $4 = _c;
final $5 = _pos;
_parse_$LeftSquareBracket(23, false);
if (_success) {
final $8 = _parseValues(25, $1);
_success = true;
_parse_$RightSquareBracket(26, false);
if (_success) {
final v = $8;
List $$;
$$ = v ?? [];
$2 = $$;
}
}
if (!_success) {
_c = $4;
_pos = $5;
if ($5 == _error) {
_expected.addAll(const ['\'[\'']);
}
}
return $2;
}
List _parseValues(int $0, bool $1) {
List $2;
final $4 = _c;
final $5 = _pos;
final $7 = _parseValue(29, $1);
if (_success) {
List $8;
if ($1) {
$8 = [];
}
for (;;) {
dynamic $9;
final $10 = _c;
final $11 = _pos;
_parse_$Comma(33, false);
if (_success) {
$9 = _parseValue(34, $1);
}
if (!_success) {
_c = $10;
_pos = $11;
if ($11 == _error) {
_expected.addAll(const ['\',\'']);
}
}
if (!_success) {
break;
}
if ($1) {
$8.add($9);
}
}
_success = true;
{
final v = $7;
final n = $8;
List $$;
$$ = [v, ...n];
$2 = $$;
}
}
if (!_success) {
_c = $4;
_pos = $5;
if ($5 == _error) {
_expected.addAll(const [
'\'false\'',
'\'null\'',
'\'true\'',
'\'number\'',
'\'string\'',
'\'[\'',
'\'{\''
]);
}
}
return $2;
}
Map<String, dynamic> _parseObject(int $0, bool $1) {
Map<String, dynamic> $2;
final $4 = _c;
final $5 = _pos;
_parse_$LeftBrace(37, false);
if (_success) {
final $8 = _parseMembers(39, $1);
_success = true;
_parse_$RightBrace(40, false);
if (_success) {
final m = $8;
Map<String, dynamic> $$;
$$ = <String, dynamic>{}..addEntries(m ?? []);
$2 = $$;
}
}
if (!_success) {
_c = $4;
_pos = $5;
if ($5 == _error) {
_expected.addAll(const ['\'{\'']);
}
}
return $2;
}
List<MapEntry<String, dynamic>> _parseMembers(int $0, bool $1) {
List<MapEntry<String, dynamic>> $2;
final $4 = _c;
final $5 = _pos;
final $7 = _parseMember(43, $1);
if (_success) {
List<MapEntry<String, dynamic>> $8;
if ($1) {
$8 = [];
}
for (;;) {
MapEntry<String, dynamic> $9;
final $10 = _c;
final $11 = _pos;
_parse_$Comma(47, false);
if (_success) {
$9 = _parseMember(48, $1);
}
if (!_success) {
_c = $10;
_pos = $11;
if ($11 == _error) {
_expected.addAll(const ['\',\'']);
}
}
if (!_success) {
break;
}
if ($1) {
$8.add($9);
}
}
_success = true;
{
final m = $7;
final n = $8;
List<MapEntry<String, dynamic>> $$;
$$ = [m, ...n];
$2 = $$;
}
}
if (!_success) {
_c = $4;
_pos = $5;
if ($5 == _error) {
_expected.addAll(const ['\'string\'']);
}
}
return $2;
}
MapEntry<String, dynamic> _parseMember(int $0, bool $1) {
MapEntry<String, dynamic> $2;
final $4 = _c;
final $5 = _pos;
final $7 = _parse_string(51, $1);
if (_success) {
_parse_$Colon(52, false);
if (_success) {
final $9 = _parseValue(53, $1);
if (_success) {
final k = $7;
final v = $9;
MapEntry<String, dynamic> $$;
$$ = MapEntry(k, v);
$2 = $$;
}
}
}
if (!_success) {
_c = $4;
_pos = $5;
if ($5 == _error) {
_expected.addAll(const ['\'string\'']);
}
}
return $2;
}
dynamic _parse_end_of_file(int $0, bool $1) {
dynamic $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
final $7 = _predicate;
final $8 = $1;
_predicate = true;
$1 = false;
if (_c < _eof) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
_c = $4;
_pos = $5;
_predicate = $7;
$1 = $8;
_success = !_success;
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\'end of file\'');
}
}
return $2;
}
dynamic _parse_false(int $0, bool $1) {
dynamic $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
if (_c == 102) {
_success = true;
_matchString('false');
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
_parse$$spacing(61, false);
if (_success) {
dynamic $$;
$$ = false;
$2 = $$;
}
}
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\'false\'');
}
}
return $2;
}
List<int> _parse_leading_spaces(int $0, bool $1) {
List<int> $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
$2 = _parse$$spacing(64, false);
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\'leading spaces\'');
}
}
return $2;
}
dynamic _parse_null(int $0, bool $1) {
dynamic $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
if (_c == 110) {
_success = true;
_matchString('null');
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
_parse$$spacing(68, false);
if (_success) {
dynamic $$;
$$ = null;
$2 = $$;
}
}
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\'null\'');
}
}
return $2;
}
dynamic _parse_true(int $0, bool $1) {
dynamic $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
if (_c == 116) {
_success = true;
_matchString('true');
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
_parse$$spacing(72, false);
if (_success) {
dynamic $$;
$$ = true;
$2 = $$;
}
}
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\'true\'');
}
}
return $2;
}
String _parse_string(int $0, bool $1) {
String $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
if (_c == 34) {
_success = true;
_c = _input[++_pos];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
List<int> $8;
if ($1) {
$8 = [];
}
for (;;) {
final $9 = _parse$$char(77, $1);
if (!_success) {
break;
}
if ($1) {
$8.add($9);
}
}
_success = true;
if (_c == 34) {
_success = true;
_c = _input[++_pos];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
_parse$$spacing(79, false);
if (_success) {
final c = $8;
String $$;
$$ = String.fromCharCodes(c);
$2 = $$;
}
}
}
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\'string\'');
}
}
return $2;
}
num _parse_number(int $0, bool $1) {
num $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
String $7;
final $8 = $1;
$1 = false;
if (_c == 45) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
_success = true;
final $13 = _c;
final $14 = _pos;
for (;;) {
if (_c == 48) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
break;
} else {
_c = $13;
_pos = $14;
}
if (_c >= 49 && _c <= 57) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
for (;;) {
if (_c >= 48 && _c <= 57) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (!_success) {
break;
}
}
_success = true;
}
if (_success) {
} else {
_c = $13;
_pos = $14;
}
break;
}
if (_success) {
final $22 = _c;
final $23 = _pos;
if (_c == 46) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
var $28 = false;
for (;;) {
if (_c >= 48 && _c <= 57) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (!_success) {
_success = $28;
break;
}
$28 = true;
}
}
if (!_success) {
_c = $22;
_pos = $23;
}
_success = true;
final $31 = _c;
final $32 = _pos;
if (_c == 69 || _c == 101) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
var $37 = false;
for (;;) {
if (_c == 32 || _c >= 43 && _c <= 93) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (!_success) {
_success = $37;
break;
}
$37 = true;
}
}
if (!_success) {
_c = $31;
_pos = $32;
}
_success = true;
}
if (!_success) {
_c = $4;
_pos = $5;
} else {
$7 = _text.substring($5, _pos);
}
$1 = $8;
if (_success) {
_parse$$spacing(106, false);
if (_success) {
final n = $7;
num $$;
$$ = num.parse(n);
$2 = $$;
}
}
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\'number\'');
}
}
return $2;
}
String _parse_$LeftBrace(int $0, bool $1) {
String $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
if (_c == 123) {
_success = true;
$2 = '{';
_c = _input[++_pos];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
_parse$$spacing(110, false);
}
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\'{\'');
}
}
return $2;
}
String _parse_$RightBrace(int $0, bool $1) {
String $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
if (_c == 125) {
_success = true;
$2 = '}';
_c = _input[++_pos];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
_parse$$spacing(114, false);
}
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\'}\'');
}
}
return $2;
}
String _parse_$LeftSquareBracket(int $0, bool $1) {
String $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
if (_c == 91) {
_success = true;
$2 = '[';
_c = _input[++_pos];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
_parse$$spacing(118, false);
}
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\'[\'');
}
}
return $2;
}
String _parse_$RightSquareBracket(int $0, bool $1) {
String $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
if (_c == 93) {
_success = true;
$2 = ']';
_c = _input[++_pos];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
_parse$$spacing(122, false);
}
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\']\'');
}
}
return $2;
}
String _parse_$Comma(int $0, bool $1) {
String $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
if (_c == 44) {
_success = true;
$2 = ',';
_c = _input[++_pos];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
_parse$$spacing(126, false);
}
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\',\'');
}
}
return $2;
}
String _parse_$Colon(int $0, bool $1) {
String $2;
_failure = -1;
final $4 = _c;
final $5 = _pos;
if (_c == 58) {
_success = true;
$2 = ':';
_c = _input[++_pos];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
_parse$$spacing(130, false);
}
if (!_success) {
_c = $4;
_pos = $5;
if (_failure >= _error) {
if (_failure > _error) {
_error = _failure;
_expected = [];
}
_expected.add('\':\'');
}
}
return $2;
}
int _parse$$char(int $0, bool $1) {
int $2;
final $4 = _c;
final $5 = _pos;
for (;;) {
if (_c == 92) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
$2 = _parse$$escaped(134, $1);
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
$2 = _parse$$unescaped(136, $1);
if (_success) {
} else {
_c = $4;
_pos = $5;
}
break;
}
return $2;
}
int _parse$$escaped(int $0, bool $1) {
int $2;
final $4 = _c;
final $5 = _pos;
for (;;) {
if (_c == 34) {
_success = true;
$2 = _c;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c == 92) {
_success = true;
$2 = _c;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c == 47) {
_success = true;
$2 = _c;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c == 98) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
int $$;
$$ = 0x8;
$2 = $$;
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c == 102) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
int $$;
$$ = 0xC;
$2 = $$;
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c == 110) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
int $$;
$$ = 0xA;
$2 = $$;
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c == 114) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
int $$;
$$ = 0xD;
$2 = $$;
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c == 116) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
int $$;
$$ = 0x9;
$2 = $$;
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c == 117) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
$2 = _parse$$hexdig4(156, $1);
}
if (_success) {
} else {
_c = $4;
_pos = $5;
}
break;
}
return $2;
}
int _parse$$hexdig4(int $0, bool $1) {
int $2;
final $4 = _c;
final $5 = _pos;
final $7 = _parse$$hexdig(159, $1);
if (_success) {
final $8 = _parse$$hexdig(160, $1);
if (_success) {
final $9 = _parse$$hexdig(161, $1);
if (_success) {
final $10 = _parse$$hexdig(162, $1);
if (_success) {
final a = $7;
final b = $8;
final c = $9;
final d = $10;
int $$;
$$ = a * 0xfff + b * 0xff + c * 0xf + d;
$2 = $$;
}
}
}
}
if (!_success) {
_c = $4;
_pos = $5;
}
return $2;
}
int _parse$$hexdig(int $0, bool $1) {
int $2;
final $4 = _c;
final $5 = _pos;
for (;;) {
if (_c >= 97 && _c <= 102) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
int $$;
$$ = $$ - 97;
$2 = $$;
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c >= 65 && _c <= 70) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
int $$;
$$ = $$ - 65;
$2 = $$;
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c >= 48 && _c <= 57) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
int $$;
$$ = $$ - 48;
$2 = $$;
}
if (_success) {
} else {
_c = $4;
_pos = $5;
}
break;
}
return $2;
}
int _parse$$unescaped(int $0, bool $1) {
int $2;
final $4 = _c;
final $5 = _pos;
for (;;) {
if (_c >= 32 && _c <= 33) {
_success = true;
$2 = _c;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c >= 35 && _c <= 91) {
_success = true;
$2 = _c;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
break;
} else {
_c = $4;
_pos = $5;
}
if (_c >= 93 && _c <= 1114111) {
_success = true;
$2 = _c;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (_success) {
} else {
_c = $4;
_pos = $5;
}
break;
}
return $2;
}
List<int> _parse$$spacing(int $0, bool $1) {
List<int> $2;
final $4 = _c;
final $5 = _pos;
for (;;) {
if (_c >= 9 && _c <= 10 || _c == 13 || _c == 32) {
_success = true;
_c = _input[_pos += _c <= 65535 ? 1 : 2];
} else {
_success = false;
if (_failure < _pos) {
_failure = _pos;
}
}
if (!_success) {
break;
}
}
_success = true;
if (!_success) {
_c = $4;
_pos = $5;
}
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: unused_element
// ignore_for_file: unused_field