parse method

dynamic parse(
  1. String? preInput,
  2. String? preStartRule
)

Implementation

dynamic parse(String? preInput, String? preStartRule) {
  input = preInput ?? '';
  startRule = preStartRule;

  final parseFunctions = {
    'fragment': _parseFragment,
    'range': _parseRange,
    'path': _parsePath,
    'local_path': _parseLocalPath,
    'indexStep': _parseIndexStep,
    'indirectionStep': _parseIndirectionStep,
    'terminus': _parseTerminus,
    'idAssertion': _parseIdAssertion,
    'textLocationAssertion': _parseTextLocationAssertion,
    'parameter': _parseParameter,
    'csv': _parseCsv,
    'valueNoSpace': _parseValueNoSpace,
    'value': _parseValue,
    'escapedSpecialChars': _parseEscapedSpecialChars,
    'number': _parseNumber,
    'integer': _parseInteger,
    'space': _parseSpace,
    'circumflex': _parseCircumflex,
    'doubleQuote': _parseDoubleQuote,
    'squareBracket': _parseSquareBracket,
    'parentheses': _parseParentheses,
    'comma': _parseComma,
    'semicolon': _parseSemicolon,
    'equal': _parseEqual,
    'character': _parseCharacter
  };

  if (startRule != null) {
    if (parseFunctions[startRule!] == null) {
      throw Exception('Invalid rule name: ${quote(startRule!)}.');
    }
  } else {
    startRule = 'fragment';
  }

  final result = parseFunctions[startRule!]!();

  if (result == null || pos != input.length) {
    final offset = max(pos, rightmostFailuresPos);
    final found = offset < input.length ? input[offset] : null;
    final errorPosition = _computeErrorPosition();

    throw CfiSyntaxException(
      _cleanupExpected(rightmostFailuresExpected),
      found,
      offset,
      errorPosition.line,
      errorPosition.column,
    );
  }

  return result;
}