@@ -536,9 +536,11 @@ module.exports = grammar({
536
536
537
537
_specification_part : $ => prec ( 1 , choice (
538
538
// Split out so it can be used as a supertype
539
- $ . _specification_parts ,
540
- // This catches statement functions, which are completely ambiguous
541
- seq ( $ . assignment_statement , $ . _end_of_statement ) ,
539
+ seq ( $ . _specification_parts , $ . _end_of_statement ) ,
540
+ // These two can't be included in the above because or we
541
+ // duplicate the end_of_statement in the end block rule
542
+ $ . interface ,
543
+ $ . derived_type_definition ,
542
544
// This allows format statements in the specification part,
543
545
// without making the statements rule particularly awkward
544
546
prec ( 1 , seq ( $ . statement_label , $ . format_statement , $ . _end_of_statement ) ) ,
@@ -561,8 +563,6 @@ module.exports = grammar({
561
563
$ . private_statement ,
562
564
$ . enum ,
563
565
$ . enumeration_type ,
564
- $ . interface ,
565
- $ . derived_type_definition ,
566
566
$ . namelist_statement ,
567
567
$ . common_statement ,
568
568
$ . variable_declaration ,
@@ -571,6 +571,8 @@ module.exports = grammar({
571
571
$ . equivalence_statement ,
572
572
$ . data_statement ,
573
573
$ . cray_pointer_declaration ,
574
+ // This catches statement functions, which are completely ambiguous
575
+ $ . assignment_statement ,
574
576
) ) ,
575
577
576
578
use_statement : $ => seq (
@@ -588,7 +590,6 @@ module.exports = grammar({
588
590
$ . included_items
589
591
)
590
592
) ,
591
- $ . _end_of_statement ,
592
593
) ,
593
594
594
595
included_items : $ => seq (
@@ -630,7 +631,6 @@ module.exports = grammar({
630
631
) )
631
632
)
632
633
) ,
633
- $ . _end_of_statement
634
634
) ,
635
635
636
636
save_statement : $ => prec ( 1 , seq (
@@ -642,7 +642,6 @@ module.exports = grammar({
642
642
seq ( '/' , $ . identifier , '/' ) ,
643
643
) ) ,
644
644
) ) ,
645
- $ . _end_of_statement ,
646
645
) ) ,
647
646
648
647
private_statement : $ => prec . right ( 1 , seq (
@@ -651,7 +650,6 @@ module.exports = grammar({
651
650
optional ( '::' ) ,
652
651
commaSep1 ( choice ( $ . identifier , $ . _generic_procedure ) )
653
652
) ) ,
654
- $ . _end_of_statement ,
655
653
) ) ,
656
654
657
655
public_statement : $ => prec . right ( 1 , seq (
@@ -660,13 +658,11 @@ module.exports = grammar({
660
658
optional ( '::' ) ,
661
659
commaSep1 ( choice ( $ . identifier , $ . _generic_procedure ) )
662
660
) ) ,
663
- $ . _end_of_statement ,
664
661
) ) ,
665
662
666
663
namelist_statement : $ => seq (
667
664
caseInsensitive ( 'namelist' ) ,
668
665
repeat1 ( $ . variable_group ) ,
669
- $ . _end_of_statement
670
666
) ,
671
667
672
668
common_statement : $ => seq (
@@ -675,7 +671,6 @@ module.exports = grammar({
675
671
$ . variable_group ,
676
672
commaSep1 ( $ . _variable_declarator )
677
673
) ) ,
678
- $ . _end_of_statement
679
674
) ,
680
675
681
676
variable_group : $ => seq (
@@ -693,7 +688,6 @@ module.exports = grammar({
693
688
import_statement : $ => prec . left ( seq (
694
689
caseInsensitive ( 'import' ) ,
695
690
optional ( $ . _import_names ) ,
696
- $ . _end_of_statement
697
691
) ) ,
698
692
_import_names : $ => choice (
699
693
seq ( optional ( '::' ) , commaSep1 ( $ . identifier ) ) ,
@@ -709,13 +703,15 @@ module.exports = grammar({
709
703
derived_type_definition : $ => seq (
710
704
$ . derived_type_statement ,
711
705
repeat ( choice (
712
- $ . public_statement ,
713
- $ . private_statement ,
714
706
seq (
707
+ choice (
708
+ $ . public_statement ,
709
+ $ . private_statement ,
715
710
alias ( caseInsensitive ( 'sequence' ) , $ . sequence_statement ) ,
716
- $ . _end_of_statement
711
+ $ . include_statement ,
712
+ ) ,
713
+ $ . _end_of_statement
717
714
) ,
718
- $ . include_statement ,
719
715
$ . variable_declaration ,
720
716
$ . preproc_include ,
721
717
$ . preproc_def ,
@@ -757,7 +753,6 @@ module.exports = grammar({
757
753
seq ( ',' , commaSep1 ( $ . _derived_type_qualifier ) , '::' , $ . _type_name )
758
754
) ,
759
755
optional ( alias ( $ . argument_list , $ . derived_type_parameter_list ) ) ,
760
- $ . _end_of_statement
761
756
) ,
762
757
763
758
end_type_statement : $ => blockStructureEnding ( $ , 'type' ) ,
@@ -790,7 +785,6 @@ module.exports = grammar({
790
785
$ . method_name ,
791
786
$ . binding ,
792
787
) ) ) ,
793
- $ . _end_of_statement ,
794
788
) ,
795
789
binding : $ => seq ( $ . binding_name , '=>' , $ . method_name ) ,
796
790
binding_name : $ => choice (
@@ -841,7 +835,6 @@ module.exports = grammar({
841
835
) ) ,
842
836
optional ( '::' ) ,
843
837
$ . _declaration_targets ,
844
- $ . _end_of_statement
845
838
) ,
846
839
847
840
procedure_declaration : $ => seq (
@@ -860,7 +853,6 @@ module.exports = grammar({
860
853
) ) ,
861
854
optional ( '::' ) ,
862
855
commaSep1 ( field ( 'declarator' , $ . _variable_declarator ) ) ,
863
- $ . _end_of_statement ,
864
856
) ,
865
857
866
858
variable_attributes : $ => seq (
@@ -1042,15 +1034,13 @@ module.exports = grammar({
1042
1034
'(' ,
1043
1035
commaSep1 ( $ . parameter_assignment ) ,
1044
1036
')' ,
1045
- $ . _end_of_statement
1046
1037
) ) ,
1047
1038
1048
1039
parameter_assignment : $ => seq ( $ . identifier , '=' , $ . _expression ) ,
1049
1040
1050
1041
equivalence_statement : $ => seq (
1051
1042
caseInsensitive ( 'equivalence' ) ,
1052
1043
commaSep1 ( $ . equivalence_set ) ,
1053
- $ . _end_of_statement ,
1054
1044
) ,
1055
1045
1056
1046
equivalence_set : $ => seq (
@@ -1064,7 +1054,6 @@ module.exports = grammar({
1064
1054
cray_pointer_declaration : $ => seq (
1065
1055
caseInsensitive ( 'pointer' ) ,
1066
1056
commaSep1 ( $ . cray_pointer_pair ) ,
1067
- $ . _end_of_statement
1068
1057
) ,
1069
1058
cray_pointer_pair : $ => seq (
1070
1059
'(' ,
@@ -1088,7 +1077,6 @@ module.exports = grammar({
1088
1077
$ . _statements ,
1089
1078
$ . _end_of_statement
1090
1079
) ,
1091
- $ . include_statement ,
1092
1080
';'
1093
1081
) ,
1094
1082
@@ -1128,6 +1116,7 @@ module.exports = grammar({
1128
1116
$ . coarray_critical_statement ,
1129
1117
// Not strictly valid, but can catch extensions and preprocessor macros
1130
1118
$ . call_expression ,
1119
+ $ . include_statement ,
1131
1120
) ,
1132
1121
1133
1122
statement_label : $ => prec ( 1 , alias ( $ . _integer_literal , 'statement_label' ) ) ,
@@ -1203,13 +1192,11 @@ module.exports = grammar({
1203
1192
include_statement : $ => prec ( 1 , seq (
1204
1193
caseInsensitive ( 'include' ) ,
1205
1194
field ( "path" , alias ( $ . string_literal , $ . filename ) ) ,
1206
- $ . _end_of_statement ,
1207
1195
) ) ,
1208
1196
1209
1197
data_statement : $ => seq (
1210
1198
caseInsensitive ( 'data' ) ,
1211
1199
sep1 ( $ . data_set , optional ( ',' ) ) ,
1212
- $ . _end_of_statement ,
1213
1200
) ,
1214
1201
data_set : $ => prec ( 1 , seq (
1215
1202
commaSep1 (
@@ -1704,7 +1691,6 @@ module.exports = grammar({
1704
1691
$ . enum_statement ,
1705
1692
repeat ( $ . enumerator_statement ) ,
1706
1693
$ . end_enum_statement ,
1707
- $ . _end_of_statement
1708
1694
) ,
1709
1695
1710
1696
enum_statement : $ => seq (
@@ -1718,7 +1704,6 @@ module.exports = grammar({
1718
1704
$ . enumeration_type_statement ,
1719
1705
repeat ( $ . enumerator_statement ) ,
1720
1706
$ . end_enumeration_type_statement ,
1721
- $ . _end_of_statement
1722
1707
) ,
1723
1708
1724
1709
enumeration_type_statement : $ => seq (
0 commit comments