@@ -96,7 +96,6 @@ module.exports = grammar({
9696 [ $ . type_statement ] ,
9797 [ $ . preproc_ifdef_in_specification_part , $ . program ] ,
9898 [ $ . preproc_else_in_specification_part , $ . program ] ,
99- [ $ . statement_function , $ . _expression ] ,
10099 [ $ . coarray_critical_statement , $ . identifier ] ,
101100 ] ,
102101
@@ -114,6 +113,7 @@ module.exports = grammar({
114113 $ . interface ,
115114 $ . subroutine ,
116115 $ . function ,
116+ $ . block_data ,
117117 $ . preproc_if ,
118118 $ . preproc_ifdef ,
119119 $ . preproc_include ,
@@ -348,7 +348,8 @@ module.exports = grammar({
348348 $ . import_statement ,
349349 $ . procedure_statement ,
350350 $ . function ,
351- $ . subroutine
351+ $ . subroutine ,
352+ ';'
352353 ) ,
353354
354355 interface_statement : $ => seq (
@@ -364,6 +365,39 @@ module.exports = grammar({
364365 $ . _end_of_statement
365366 ) ) ,
366367
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+
367401 assignment : $ => seq ( caseInsensitive ( 'assignment' ) , '(' , '=' , ')' ) ,
368402 operator : $ => seq ( caseInsensitive ( 'operator' ) , '(' , / [ ^ ( ) ] + / , ')' ) ,
369403 defined_io_procedure : $ => seq (
@@ -504,12 +538,13 @@ module.exports = grammar({
504538 seq ( $ . parameter_statement , $ . _end_of_statement ) ,
505539 seq ( $ . equivalence_statement , $ . _end_of_statement ) ,
506540 seq ( $ . data_statement , $ . _end_of_statement ) ,
507- seq ( $ . statement_function , $ . _end_of_statement ) ,
541+ seq ( $ . assignment_statement , $ . _end_of_statement ) ,
508542 prec ( 1 , seq ( $ . statement_label , $ . format_statement , $ . _end_of_statement ) ) ,
509543 $ . preproc_include ,
510544 $ . preproc_def ,
511545 $ . preproc_function_def ,
512546 $ . preproc_call ,
547+ ';' ,
513548 ) ) ,
514549
515550 use_statement : $ => seq (
@@ -1033,6 +1068,7 @@ module.exports = grammar({
10331068 $ . file_position_statement ,
10341069 $ . allocate_statement ,
10351070 $ . entry_statement ,
1071+ $ . assign_statement ,
10361072 $ . coarray_statement ,
10371073 $ . coarray_team_statement ,
10381074 $ . coarray_critical_statement ,
@@ -1092,10 +1128,20 @@ module.exports = grammar({
10921128 '(' , commaSep1 ( $ . statement_label_reference ) , ')' ,
10931129 optional ( ',' ) ,
10941130 $ . _expression ,
1095- )
1131+ ) ,
1132+ // Assigned goto (deleted)
1133+ seq (
1134+ $ . _expression ,
1135+ optional ( ',' ) ,
1136+ '(' , commaSep1 ( $ . statement_label_reference ) , ')' ,
1137+ ) ,
10961138 )
10971139 ) ,
1098- caseInsensitive ( 'return' ) ,
1140+ seq (
1141+ caseInsensitive ( 'return' ) ,
1142+ // Obsolescent alternate return
1143+ optional ( $ . _expression ) ,
1144+ )
10991145 ) ,
11001146
11011147 include_statement : $ => seq (
@@ -1105,7 +1151,7 @@ module.exports = grammar({
11051151
11061152 data_statement : $ => seq (
11071153 caseInsensitive ( 'data' ) ,
1108- commaSep1 ( $ . data_set )
1154+ sep1 ( $ . data_set , optional ( ',' ) )
11091155 ) ,
11101156 data_set : $ => prec ( 1 , seq (
11111157 commaSep1 (
@@ -1524,13 +1570,10 @@ module.exports = grammar({
15241570
15251571 // Comma is technically only optional in certain circumstances,
15261572 // 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 ( ',' ) ) ,
15311574
15321575 // 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 : . * $ ] + / ) ,
15341577
15351578 _io_arguments : $ => seq (
15361579 '(' ,
@@ -1720,16 +1763,6 @@ module.exports = grammar({
17201763 alias ( $ . coarray_index , $ . coarray_size ) ,
17211764 ) ,
17221765
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-
17331766 // Obsolescent feature
17341767 entry_statement : $ => seq (
17351768 caseInsensitive ( 'entry' ) ,
@@ -1741,6 +1774,14 @@ module.exports = grammar({
17411774 ) ) ) ,
17421775 ) ,
17431776
1777+ // Deleted feature
1778+ assign_statement : $ => seq (
1779+ caseInsensitive ( 'assign' ) ,
1780+ $ . number_literal ,
1781+ caseInsensitive ( 'to' ) ,
1782+ $ . identifier
1783+ ) ,
1784+
17441785 // Expressions
17451786
17461787 _expression : $ => choice (
@@ -2128,6 +2169,7 @@ module.exports = grammar({
21282169 caseInsensitive ( 'automatic' ) ,
21292170 caseInsensitive ( 'block' ) ,
21302171 caseInsensitive ( 'byte' ) ,
2172+ prec ( - 1 , caseInsensitive ( 'call' ) ) ,
21312173 caseInsensitive ( 'change' ) ,
21322174 caseInsensitive ( 'constant' ) ,
21332175 caseInsensitive ( 'contiguous' ) ,
@@ -2148,13 +2190,15 @@ module.exports = grammar({
21482190 caseInsensitive ( 'fail' ) ,
21492191 caseInsensitive ( 'form' ) ,
21502192 caseInsensitive ( 'format' ) ,
2193+ caseInsensitive ( 'go' ) ,
21512194 caseInsensitive ( 'if' ) ,
21522195 caseInsensitive ( 'inquire' ) ,
21532196 caseInsensitive ( 'intrinsic' ) ,
21542197 caseInsensitive ( 'kind' ) ,
21552198 caseInsensitive ( 'len' ) ,
21562199 caseInsensitive ( 'lock' ) ,
21572200 caseInsensitive ( 'null' ) ,
2201+ prec ( - 1 , caseInsensitive ( 'open' ) ) ,
21582202 caseInsensitive ( 'optional' ) ,
21592203 caseInsensitive ( 'parameter' ) ,
21602204 caseInsensitive ( 'pointer' ) ,
0 commit comments