scan method

  1. @override
Safety<bool> scan(
  1. SyntaxScanner<Object, Object> scanner
)

Implementation

@override
Safety<bool> scan(SyntaxScanner scanner) {

    final log = Log(classLocation: runtimeType, functionLocation: 'scan');

    final firstResult = scanner.look();
    log.add(firstResult);
    final first = firstResult.wrapped;
    if (first is! ValidIdentifier) {
        scanner.reset();
        return Safety(false, log);
    }

    // empty もしくは 1つの ListOfWhiteSpace が返るはず.
    final secondLookWhileResult = scanner.lookWhile<ListOfWhiteSpace>();
    log.add(secondLookWhileResult);
    late final ListOfWhiteSpace second;
    if (secondLookWhileResult.wrapped.isEmpty) second = ListOfWhiteSpace.fromIterable([]);
    else second = secondLookWhileResult.wrapped.first;

    final thirdResult = scanner.look();
    log.add(thirdResult);
    final third = thirdResult.wrapped;
    if (third is! ValidOperator) {
        scanner.reset();
        return Safety(false, log);
    }

    // empty もしくは 1つの ListOfWhiteSpace が返るはず.
    final fourthLookWhileResult = scanner.lookWhile<ListOfWhiteSpace>();
    log.add(fourthLookWhileResult);
    late final ListOfWhiteSpace fourth;
    if (fourthLookWhileResult.wrapped.isEmpty) fourth = ListOfWhiteSpace.fromIterable([]);
    else fourth = secondLookWhileResult.wrapped.first;

    final fifthResult = scanner.look();
    log.add(fifthResult);
    final fifth = fifthResult.wrapped;
    if (fifth is! ValidIdentifier) {
        scanner.reset();
        return Safety(false, log);
    }

    final result = OperatorExpression(first, second, third, fourth, fifth);
    scanner.scan(result);

    return Safety(true, log);

}