@@ -96,7 +96,6 @@ module.exports = grammar({
96
96
[ $ . type_statement ] ,
97
97
[ $ . preproc_ifdef_in_specification_part , $ . program ] ,
98
98
[ $ . preproc_else_in_specification_part , $ . program ] ,
99
- [ $ . statement_function , $ . _expression ] ,
100
99
[ $ . coarray_critical_statement , $ . identifier ] ,
101
100
] ,
102
101
@@ -114,6 +113,7 @@ module.exports = grammar({
114
113
$ . interface ,
115
114
$ . subroutine ,
116
115
$ . function ,
116
+ $ . block_data ,
117
117
$ . preproc_if ,
118
118
$ . preproc_ifdef ,
119
119
$ . preproc_include ,
@@ -348,7 +348,8 @@ module.exports = grammar({
348
348
$ . import_statement ,
349
349
$ . procedure_statement ,
350
350
$ . function ,
351
- $ . subroutine
351
+ $ . subroutine ,
352
+ ';'
352
353
) ,
353
354
354
355
interface_statement : $ => seq (
@@ -364,6 +365,39 @@ module.exports = grammar({
364
365
$ . _end_of_statement
365
366
) ) ,
366
367
368
+ // Obsolescent feature
369
+ block_data : $ => seq (
370
+ $ . block_data_statement ,
371
+ repeat (
372
+ choice (
373
+ $ . _specification_part ,
374
+ alias ( $ . preproc_if_in_module , $ . preproc_if ) ,
375
+ alias ( $ . preproc_ifdef_in_module , $ . preproc_ifdef )
376
+ ) ,
377
+ ) ,
378
+ $ . end_block_data_statement
379
+ ) ,
380
+
381
+ block_data_statement : $ => seq (
382
+ whiteSpacedKeyword ( 'block' , 'data' ) ,
383
+ optional ( $ . _name ) ,
384
+ $ . _end_of_statement
385
+ ) ,
386
+
387
+ // Can't use `blockStructureEnding` because it's two keywords
388
+ end_block_data_statement : $ => {
389
+ const structType = whiteSpacedKeyword ( 'block' , 'data' , false )
390
+ return prec . right ( seq (
391
+ alias ( choice (
392
+ seq (
393
+ caseInsensitive ( 'end' , false ) ,
394
+ optional ( structType ) ) ,
395
+ caseInsensitive ( 'end' + structType , false ) ) ,
396
+ 'end' + structType ) ,
397
+ optional ( $ . _name ) ,
398
+ $ . _end_of_statement ) )
399
+ } ,
400
+
367
401
assignment : $ => seq ( caseInsensitive ( 'assignment' ) , '(' , '=' , ')' ) ,
368
402
operator : $ => seq ( caseInsensitive ( 'operator' ) , '(' , / [ ^ ( ) ] + / , ')' ) ,
369
403
defined_io_procedure : $ => seq (
@@ -504,12 +538,13 @@ module.exports = grammar({
504
538
seq ( $ . parameter_statement , $ . _end_of_statement ) ,
505
539
seq ( $ . equivalence_statement , $ . _end_of_statement ) ,
506
540
seq ( $ . data_statement , $ . _end_of_statement ) ,
507
- seq ( $ . statement_function , $ . _end_of_statement ) ,
541
+ seq ( $ . assignment_statement , $ . _end_of_statement ) ,
508
542
prec ( 1 , seq ( $ . statement_label , $ . format_statement , $ . _end_of_statement ) ) ,
509
543
$ . preproc_include ,
510
544
$ . preproc_def ,
511
545
$ . preproc_function_def ,
512
546
$ . preproc_call ,
547
+ ';' ,
513
548
) ) ,
514
549
515
550
use_statement : $ => seq (
@@ -1033,6 +1068,7 @@ module.exports = grammar({
1033
1068
$ . file_position_statement ,
1034
1069
$ . allocate_statement ,
1035
1070
$ . entry_statement ,
1071
+ $ . assign_statement ,
1036
1072
$ . coarray_statement ,
1037
1073
$ . coarray_team_statement ,
1038
1074
$ . coarray_critical_statement ,
@@ -1092,10 +1128,20 @@ module.exports = grammar({
1092
1128
'(' , commaSep1 ( $ . statement_label_reference ) , ')' ,
1093
1129
optional ( ',' ) ,
1094
1130
$ . _expression ,
1095
- )
1131
+ ) ,
1132
+ // Assigned goto (deleted)
1133
+ seq (
1134
+ $ . _expression ,
1135
+ optional ( ',' ) ,
1136
+ '(' , commaSep1 ( $ . statement_label_reference ) , ')' ,
1137
+ ) ,
1096
1138
)
1097
1139
) ,
1098
- caseInsensitive ( 'return' ) ,
1140
+ seq (
1141
+ caseInsensitive ( 'return' ) ,
1142
+ // Obsolescent alternate return
1143
+ optional ( $ . _expression ) ,
1144
+ )
1099
1145
) ,
1100
1146
1101
1147
include_statement : $ => seq (
@@ -1105,7 +1151,7 @@ module.exports = grammar({
1105
1151
1106
1152
data_statement : $ => seq (
1107
1153
caseInsensitive ( 'data' ) ,
1108
- commaSep1 ( $ . data_set )
1154
+ sep1 ( $ . data_set , optional ( ',' ) )
1109
1155
) ,
1110
1156
data_set : $ => prec ( 1 , seq (
1111
1157
commaSep1 (
@@ -1524,13 +1570,10 @@ module.exports = grammar({
1524
1570
1525
1571
// Comma is technically only optional in certain circumstances,
1526
1572
// but capturing all of those is complicated!
1527
- _transfer_items : $ => seq (
1528
- $ . _transfer_item ,
1529
- repeat ( seq ( optional ( ',' ) , $ . _transfer_item ) )
1530
- ) ,
1573
+ _transfer_items : $ => sep1 ( $ . _transfer_item , optional ( ',' ) ) ,
1531
1574
1532
1575
// H is not a valid edit descriptor because it clashes with Hollerith constants
1533
- edit_descriptor : $ => / [ a - g i - z A - G I - Z 0 - 9 / : . * $ ] + / ,
1576
+ edit_descriptor : $ => choice ( '/' , / [ a - g i - z A - G I - Z 0 - 9 : . * $ ] + / ) ,
1534
1577
1535
1578
_io_arguments : $ => seq (
1536
1579
'(' ,
@@ -1720,16 +1763,6 @@ module.exports = grammar({
1720
1763
alias ( $ . coarray_index , $ . coarray_size ) ,
1721
1764
) ,
1722
1765
1723
- // Obsolescent feature
1724
- statement_function : $ => prec . right ( seq (
1725
- $ . identifier ,
1726
- alias ( $ . _statement_function_arg_list , $ . argument_list ) ,
1727
- '=' ,
1728
- $ . _expression ,
1729
- ) ) ,
1730
-
1731
- _statement_function_arg_list : $ => seq ( '(' , commaSep1 ( $ . identifier ) , ')' ) ,
1732
-
1733
1766
// Obsolescent feature
1734
1767
entry_statement : $ => seq (
1735
1768
caseInsensitive ( 'entry' ) ,
@@ -1741,6 +1774,14 @@ module.exports = grammar({
1741
1774
) ) ) ,
1742
1775
) ,
1743
1776
1777
+ // Deleted feature
1778
+ assign_statement : $ => seq (
1779
+ caseInsensitive ( 'assign' ) ,
1780
+ $ . number_literal ,
1781
+ caseInsensitive ( 'to' ) ,
1782
+ $ . identifier
1783
+ ) ,
1784
+
1744
1785
// Expressions
1745
1786
1746
1787
_expression : $ => choice (
@@ -2128,6 +2169,7 @@ module.exports = grammar({
2128
2169
caseInsensitive ( 'automatic' ) ,
2129
2170
caseInsensitive ( 'block' ) ,
2130
2171
caseInsensitive ( 'byte' ) ,
2172
+ prec ( - 1 , caseInsensitive ( 'call' ) ) ,
2131
2173
caseInsensitive ( 'change' ) ,
2132
2174
caseInsensitive ( 'constant' ) ,
2133
2175
caseInsensitive ( 'contiguous' ) ,
@@ -2148,13 +2190,15 @@ module.exports = grammar({
2148
2190
caseInsensitive ( 'fail' ) ,
2149
2191
caseInsensitive ( 'form' ) ,
2150
2192
caseInsensitive ( 'format' ) ,
2193
+ caseInsensitive ( 'go' ) ,
2151
2194
caseInsensitive ( 'if' ) ,
2152
2195
caseInsensitive ( 'inquire' ) ,
2153
2196
caseInsensitive ( 'intrinsic' ) ,
2154
2197
caseInsensitive ( 'kind' ) ,
2155
2198
caseInsensitive ( 'len' ) ,
2156
2199
caseInsensitive ( 'lock' ) ,
2157
2200
caseInsensitive ( 'null' ) ,
2201
+ prec ( - 1 , caseInsensitive ( 'open' ) ) ,
2158
2202
caseInsensitive ( 'optional' ) ,
2159
2203
caseInsensitive ( 'parameter' ) ,
2160
2204
caseInsensitive ( 'pointer' ) ,
0 commit comments