construct<PrivateOrSequence>(Parser<SequenceStmt>{}))
// R730 end-type-stmt -> END TYPE [type-name]
-constexpr auto missingOptionalName{defaulted(cut >> maybe(name))};
-constexpr auto noNameEnd{"END" >> missingOptionalName};
-constexpr auto bareEnd{noNameEnd / lookAhead(endOfStmt)};
-constexpr auto endStmtErrorRecovery{
- ("END"_tok / SkipPast<'\n'>{} || consumedAllInput) >> missingOptionalName};
TYPE_PARSER(construct<EndTypeStmt>(
recovery("END TYPE" >> maybe(name), endStmtErrorRecovery)))
// R1403 end-program-stmt -> END [PROGRAM [program-name]]
TYPE_CONTEXT_PARSER("END PROGRAM statement"_en_US,
- construct<EndProgramStmt>(recovery(
- "END PROGRAM" >> maybe(name) || bareEnd, endStmtErrorRecovery)))
+ construct<EndProgramStmt>(recovery("END PROGRAM" >> maybe(name) || bareEnd,
+ unterminatedEndStmtErrorRecovery)))
// R1404 module ->
// module-stmt [specification-part] [module-subprogram-part]
// R1406 end-module-stmt -> END [MODULE [module-name]]
TYPE_CONTEXT_PARSER("END MODULE statement"_en_US,
- construct<EndModuleStmt>(
- recovery("END MODULE" >> maybe(name) || bareEnd, endStmtErrorRecovery)))
+ construct<EndModuleStmt>(recovery("END MODULE" >> maybe(name) || bareEnd,
+ unterminatedEndStmtErrorRecovery)))
// R1407 module-subprogram-part -> contains-stmt [module-subprogram]...
TYPE_CONTEXT_PARSER("module subprogram part"_en_US,
// R1419 end-submodule-stmt -> END [SUBMODULE [submodule-name]]
TYPE_CONTEXT_PARSER("END SUBMODULE statement"_en_US,
- construct<EndSubmoduleStmt>(recovery(
- "END SUBMODULE" >> maybe(name) || bareEnd, endStmtErrorRecovery)))
+ construct<EndSubmoduleStmt>(
+ recovery("END SUBMODULE" >> maybe(name) || bareEnd,
+ unterminatedEndStmtErrorRecovery)))
// R1420 block-data -> block-data-stmt [specification-part] end-block-data-stmt
TYPE_CONTEXT_PARSER("BLOCK DATA subprogram"_en_US,
// R1422 end-block-data-stmt -> END [BLOCK DATA [block-data-name]]
TYPE_CONTEXT_PARSER("END BLOCK DATA statement"_en_US,
- construct<EndBlockDataStmt>(recovery(
- "END BLOCK DATA" >> maybe(name) || bareEnd, endStmtErrorRecovery)))
+ construct<EndBlockDataStmt>(
+ recovery("END BLOCK DATA" >> maybe(name) || bareEnd,
+ unterminatedEndStmtErrorRecovery)))
// R1501 interface-block ->
// interface-stmt [interface-specification]... end-interface-stmt
// R1533 end-function-stmt -> END [FUNCTION [function-name]]
TYPE_PARSER(construct<EndFunctionStmt>(
- recovery("END FUNCTION" >> maybe(name) || bareEnd, endStmtErrorRecovery)))
+ recovery("END FUNCTION" >> maybe(name) || bareEnd,
+ unterminatedEndStmtErrorRecovery)))
// R1534 subroutine-subprogram ->
// subroutine-stmt [specification-part] [execution-part]
// R1537 end-subroutine-stmt -> END [SUBROUTINE [subroutine-name]]
TYPE_PARSER(construct<EndSubroutineStmt>(
- recovery("END SUBROUTINE" >> maybe(name) || bareEnd, endStmtErrorRecovery)))
+ recovery("END SUBROUTINE" >> maybe(name) || bareEnd,
+ unterminatedEndStmtErrorRecovery)))
// R1538 separate-module-subprogram ->
// mp-subprogram-stmt [specification-part] [execution-part]
// R1540 end-mp-subprogram-stmt -> END [PROCEDURE [procedure-name]]
TYPE_CONTEXT_PARSER("END PROCEDURE statement"_en_US,
- construct<EndMpSubprogramStmt>(recovery(
- "END PROCEDURE" >> maybe(name) || bareEnd, endStmtErrorRecovery)))
+ construct<EndMpSubprogramStmt>(
+ recovery("END PROCEDURE" >> maybe(name) || bareEnd,
+ unterminatedEndStmtErrorRecovery)))
// R1541 entry-stmt -> ENTRY entry-name [( [dummy-arg-list] ) [suffix]]
TYPE_PARSER(