scan method
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);
}