fromRootCitrusSyntax static method
Implementation
static Safety<Finish> fromRootCitrusSyntax(RootCitrusSyntax rootCitrusSyntax) {
final log = Log(classLocation: Finish, functionLocation: 'fromRootCitrusSyntax');
final List<AheadCitrusSemantic> aheadList = [];
final List<FinishCitrusSemantic> finishList = [];
for (final syntax in rootCitrusSyntax.derivationCitrusSyntaxList) {
switch (syntax) {
case CurlyBind():
final result = Bind.fromCurlyBind(syntax);
log.add(result);
finishList.add(result.wrapped);
case BlockSandwich():
final blockTypeKeyword = syntax.first.second.second;
switch (blockTypeKeyword) {
case For():
final result = ForBlockSandwich.fromBlockSandwich(syntax);
log.add(result);
if (result is! Success<ForBlockSandwich, CitrusSemanticException>) continue constant;
finishList.add(result.wrapped);
case BooleanKeyword():
final result = IfBlockSandwich.fromBlockSandwich(syntax);
log.add(result);
if (result is! Success<IfBlockSandwich, CitrusSemanticException>) continue constant;
finishList.add(result.wrapped);
case Protect():
final result = ProtectBlockSandwich.fromBlockSandwich(syntax);
log.add(result);
if (result is! Success<ProtectBlockSandwich, CitrusSemanticException>) continue constant;
finishList.add(result.wrapped);
case DefineKeyword():
final result = Define.fromBlockSandwich(syntax);
log.add(result);
if (result is! Success<Define, CitrusSemanticException>) continue constant;
aheadList.add(result.wrapped);
}
constant:
case _:
final result = ConstantPart.fromDerivationCitrusSyntax(syntax);
log.add(result);
finishList.add(result.wrapped);
}
}
final result = Finish.fromIterable(aheadList, finishList);
return Safety(result, log);
}