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! AccesserableCollection) {
scanner.reset();
return Safety(false, log);
}
// empty もしくは 1つの SpaceCollection が返るはず.
final secondLookWhileResult = scanner.lookWhile<SpaceCollection>();
log.add(secondLookWhileResult);
late final SpaceCollection second;
if (secondLookWhileResult.wrapped.isEmpty) second = SpaceCollection.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つの SpaceCollection が返るはず.
final fourthLookWhileResult = scanner.lookWhile<SpaceCollection>();
log.add(fourthLookWhileResult);
late final SpaceCollection fourth;
if (fourthLookWhileResult.wrapped.isEmpty) fourth = SpaceCollection.fromIterable([]);
else fourth = secondLookWhileResult.wrapped.first;
final fifthResult = scanner.look();
log.add(fifthResult);
final fifth = fifthResult.wrapped;
if (fifth is! AccesserableCollection) {
scanner.reset();
return Safety(false, log);
}
final result = OperatorExpression(first, second, third, fourth, fifth);
scanner.scan(result);
return Safety(true, log);
}