@@ -65,13 +65,16 @@ constexpr auto namedIntrinsicOperator{
65
65
" .EQV." >> pure (DefinedOperator::IntrinsicOperator::EQV) ||
66
66
" .NEQV." >> pure (DefinedOperator::IntrinsicOperator::NEQV) ||
67
67
extension<LanguageFeature::XOROperator>(
68
+ " nonstandard usage: .XOR. spelling of .NEQV." _port_en_US,
68
69
" .XOR." >> pure (DefinedOperator::IntrinsicOperator::NEQV)) ||
69
70
extension<LanguageFeature::LogicalAbbreviations>(
71
+ " nonstandard usage: abbreviated logical operator" _port_en_US,
70
72
" .N." >> pure (DefinedOperator::IntrinsicOperator::NOT) ||
71
- " .A." >> pure (DefinedOperator::IntrinsicOperator::AND) ||
72
- " .O." >> pure (DefinedOperator::IntrinsicOperator::OR) ||
73
- extension<LanguageFeature::XOROperator>(
74
- " .X." >> pure (DefinedOperator::IntrinsicOperator::NEQV)))};
73
+ " .A." >> pure (DefinedOperator::IntrinsicOperator::AND) ||
74
+ " .O." >> pure (DefinedOperator::IntrinsicOperator::OR) ||
75
+ extension<LanguageFeature::XOROperator>(
76
+ " nonstandard usage: .X. spelling of .NEQV." _port_en_US,
77
+ " .X." >> pure (DefinedOperator::IntrinsicOperator::NEQV)))};
75
78
76
79
constexpr auto intrinsicOperator{
77
80
" **" >> pure (DefinedOperator::IntrinsicOperator::Power) ||
@@ -83,6 +86,7 @@ constexpr auto intrinsicOperator{
83
86
" -" >> pure (DefinedOperator::IntrinsicOperator::Subtract) ||
84
87
" <=" >> pure (DefinedOperator::IntrinsicOperator::LE) ||
85
88
extension<LanguageFeature::AlternativeNE>(
89
+ " nonstandard usage: <> spelling of /= or .NE." _port_en_US,
86
90
" <>" >> pure (DefinedOperator::IntrinsicOperator::NE)) ||
87
91
" <" >> pure (DefinedOperator::IntrinsicOperator::LT) ||
88
92
" ==" >> pure (DefinedOperator::IntrinsicOperator::EQ) ||
@@ -178,6 +182,7 @@ TYPE_CONTEXT_PARSER("declaration type spec"_en_US,
178
182
construct<DeclarationTypeSpec>(" *" >>
179
183
construct<DeclarationTypeSpec::ClassStar>())) ||
180
184
extension<LanguageFeature::DECStructures>(
185
+ " nonstandard usage: STRUCTURE" _port_en_US,
181
186
construct<DeclarationTypeSpec>(
182
187
// As is also done for the STRUCTURE statement, the name of
183
188
// the structure includes the surrounding slashes to avoid
@@ -202,9 +207,11 @@ TYPE_CONTEXT_PARSER("intrinsic type spec"_en_US,
202
207
" CHARACTER" >> maybe (Parser<CharSelector>{}))),
203
208
construct<IntrinsicTypeSpec>(construct<IntrinsicTypeSpec::Logical>(
204
209
" LOGICAL" >> maybe (kindSelector))),
205
- extension<LanguageFeature::DoubleComplex>(construct<IntrinsicTypeSpec>(
206
- " DOUBLE COMPLEX" >> construct<IntrinsicTypeSpec::DoubleComplex>())),
207
- extension<LanguageFeature::Byte>(
210
+ extension<LanguageFeature::DoubleComplex>(
211
+ " nonstandard usage: DOUBLE COMPLEX" _port_en_US,
212
+ construct<IntrinsicTypeSpec>(" DOUBLE COMPLEX" >>
213
+ construct<IntrinsicTypeSpec::DoubleComplex>())),
214
+ extension<LanguageFeature::Byte>(" nonstandard usage: BYTE" _port_en_US,
208
215
construct<IntrinsicTypeSpec>(construct<IntegerTypeSpec>(
209
216
" BYTE" >> construct<std::optional<KindSelector>>(pure(1 )))))))
210
217
@@ -215,8 +222,10 @@ TYPE_PARSER(construct<IntegerTypeSpec>("INTEGER" >> maybe(kindSelector)))
215
222
// Legacy extension: kind-selector -> * digit-string
216
223
TYPE_PARSER(construct<KindSelector>(
217
224
parenthesized (maybe(" KIND =" _tok) >> scalarIntConstantExpr)) ||
218
- extension<LanguageFeature::StarKind>(construct<KindSelector>(
219
- construct<KindSelector::StarSize>(" *" >> digitString64 / spaceCheck))))
225
+ extension<LanguageFeature::StarKind>(
226
+ " nonstandard usage: TYPE*KIND syntax" _port_en_US,
227
+ construct<KindSelector>(construct<KindSelector::StarSize>(
228
+ " *" >> digitString64 / spaceCheck))))
220
229
221
230
// R707 signed-int-literal-constant -> [sign] int-literal-constant
222
231
TYPE_PARSER(sourced(construct<SignedIntLiteralConstant>(
@@ -251,7 +260,9 @@ constexpr auto signedRealLiteralConstant{
251
260
// Extension: Q
252
261
// R717 exponent -> signed-digit-string
253
262
constexpr auto exponentPart{
254
- (" ed" _ch || extension<LanguageFeature::QuadPrecision>(" q" _ch)) >>
263
+ (" ed" _ch ||
264
+ extension<LanguageFeature::QuadPrecision>(
265
+ " nonstandard usage: Q exponent" _port_en_US, " q" _ch)) >>
255
266
SignedDigitString{}};
256
267
257
268
TYPE_CONTEXT_PARSER (" REAL literal constant" _en_US,
@@ -431,6 +442,7 @@ TYPE_CONTEXT_PARSER("component declaration"_en_US,
431
442
// The source field of the Name will be replaced with a distinct generated name.
432
443
TYPE_CONTEXT_PARSER(" %FILL item" _en_US,
433
444
extension<LanguageFeature::DECStructures>(
445
+ " nonstandard usage: %FILL" _port_en_US,
434
446
construct<FillDecl>(space >> sourced (" %FILL" >> construct<Name>()),
435
447
maybe(Parser<ComponentArraySpec>{}), maybe(" *" >> charLength))))
436
448
TYPE_PARSER(construct<ComponentOrFill>(Parser<ComponentDecl>{}) ||
@@ -475,10 +487,12 @@ constexpr auto initialDataTarget{indirect(designator)};
475
487
TYPE_PARSER (construct<Initialization>(" =>" >> nullInit) ||
476
488
construct<Initialization>(" =>" >> initialDataTarget) ||
477
489
construct<Initialization>(" =" >> constantExpr) ||
478
- extension<LanguageFeature::SlashInitialization>(construct<Initialization>(
479
- " /" >> nonemptyList (" expected values" _err_en_US,
480
- indirect (Parser<DataStmtValue>{})) /
481
- "/")))
490
+ extension<LanguageFeature::SlashInitialization>(
491
+ " nonstandard usage: /initialization/" _port_en_US,
492
+ construct<Initialization>(
493
+ " /" >> nonemptyList (" expected values" _err_en_US,
494
+ indirect (Parser<DataStmtValue>{})) /
495
+ "/")))
482
496
483
497
// R745 private-components-stmt -> PRIVATE
484
498
// R747 binding-private-stmt -> PRIVATE
@@ -608,10 +622,12 @@ TYPE_PARSER(
608
622
nonemptyList(" expected entity declarations" _err_en_US,
609
623
entityDeclWithoutEqInit)) ||
610
624
// PGI-only extension: comma in place of doubled colons
611
- extension<LanguageFeature::MissingColons>(construct<TypeDeclarationStmt>(
612
- declarationTypeSpec, defaulted(" ," >> nonemptyList (Parser<AttrSpec>{})),
613
- withMessage(" expected entity declarations" _err_en_US,
614
- " ," >> nonemptyList (entityDecl)))))
625
+ extension<LanguageFeature::MissingColons>(
626
+ " nonstandard usage: ',' in place of '::'" _port_en_US,
627
+ construct<TypeDeclarationStmt>(declarationTypeSpec,
628
+ defaulted (" ," >> nonemptyList (Parser<AttrSpec>{})),
629
+ withMessage(" expected entity declarations" _err_en_US,
630
+ " ," >> nonemptyList (entityDecl)))))
615
631
616
632
// R802 attr-spec ->
617
633
// access-spec | ALLOCATABLE | ASYNCHRONOUS |
@@ -841,6 +857,7 @@ TYPE_PARSER(sourced(first(construct<DataStmtConstant>(literalConstant),
841
857
construct<DataStmtConstant>(signedRealLiteralConstant),
842
858
construct<DataStmtConstant>(signedIntLiteralConstant),
843
859
extension<LanguageFeature::SignedComplexLiteral>(
860
+ " nonstandard usage: signed COMPLEX literal" _port_en_US,
844
861
construct<DataStmtConstant>(Parser<SignedComplexLiteralConstant>{})),
845
862
construct<DataStmtConstant>(nullInit),
846
863
construct<DataStmtConstant>(indirect(designator) / !"(" _tok),
@@ -869,8 +886,10 @@ TYPE_CONTEXT_PARSER("PARAMETER statement"_en_US,
869
886
construct<ParameterStmt>(
870
887
" PARAMETER" >> parenthesized(nonemptyList(Parser<NamedConstantDef>{}))))
871
888
TYPE_CONTEXT_PARSER(" old style PARAMETER statement" _en_US,
872
- extension<LanguageFeature::OldStyleParameter>(construct<OldParameterStmt>(
873
- " PARAMETER" >> nonemptyList(Parser<NamedConstantDef>{}))))
889
+ extension<LanguageFeature::OldStyleParameter>(
890
+ " nonstandard usage: PARAMETER without parentheses" _port_en_US,
891
+ construct<OldParameterStmt>(
892
+ " PARAMETER" >> nonemptyList(Parser<NamedConstantDef>{}))))
874
893
875
894
// R852 named-constant-def -> named-constant = constant-expr
876
895
TYPE_PARSER(construct<NamedConstantDef>(namedConstant, " =" >> constantExpr))
@@ -1024,6 +1043,7 @@ TYPE_CONTEXT_PARSER("designator"_en_US,
1024
1043
constexpr auto percentOrDot{" %" _tok ||
1025
1044
// legacy VAX extension for RECORD field access
1026
1045
extension<LanguageFeature::DECStructures>(
1046
+ " nonstandard usage: component access with ' .' in place of ' %' " _port_en_US,
1027
1047
" ." _tok / lookAhead(OldStructureComponentName{}))};
1028
1048
1029
1049
// R902 variable -> designator | function-reference
@@ -1184,10 +1204,12 @@ TYPE_PARSER(beginDirective >>
1184
1204
maybe ((" =" _tok || " :" _tok) >> digitString64))))) /
1185
1205
endDirective)
1186
1206
1187
- TYPE_PARSER(extension<LanguageFeature::CrayPointer>(construct<BasedPointerStmt>(
1188
- " POINTER" >> nonemptyList (" expected POINTER associations" _err_en_US,
1189
- construct<BasedPointer>(" (" >> objectName / " ," ,
1190
- objectName, maybe(Parser<ArraySpec>{}) / ")")))))
1207
+ TYPE_PARSER(extension<LanguageFeature::CrayPointer>(
1208
+ " nonstandard usage: based POINTER" _port_en_US,
1209
+ construct<BasedPointerStmt>(
1210
+ " POINTER" >> nonemptyList (" expected POINTER associations" _err_en_US,
1211
+ construct<BasedPointer>(" (" >> objectName / " ," ,
1212
+ objectName, maybe(Parser<ArraySpec>{}) / ")")))))
1191
1213
1192
1214
// Subtle: the name includes the surrounding slashes, which avoids
1193
1215
// clashes with other uses of the name in the same scope.
@@ -1206,10 +1228,12 @@ TYPE_PARSER(construct<StructureField>(statement(StructureComponents{})) ||
1206
1228
construct<StructureField>(indirect(nestedStructureDef)))
1207
1229
1208
1230
TYPE_CONTEXT_PARSER(" STRUCTURE definition" _en_US,
1209
- extension<LanguageFeature::DECStructures>(construct<StructureDef>(
1210
- statement (Parser<StructureStmt>{}), many(Parser<StructureField>{}),
1211
- statement(
1212
- construct<StructureDef::EndStructureStmt>(" END STRUCTURE" _tok)))))
1231
+ extension<LanguageFeature::DECStructures>(
1232
+ " nonstandard usage: STRUCTURE" _port_en_US,
1233
+ construct<StructureDef>(statement(Parser<StructureStmt>{}),
1234
+ many(Parser<StructureField>{}),
1235
+ statement(construct<StructureDef::EndStructureStmt>(
1236
+ " END STRUCTURE" _tok)))))
1213
1237
1214
1238
TYPE_CONTEXT_PARSER(" UNION definition" _en_US,
1215
1239
construct<Union>(statement(construct<Union::UnionStmt>(" UNION" _tok)),
0 commit comments