Skip to content

Commit 287497c

Browse files
authored
Merge pull request #130 from stadelmanma/more-ancient-bits
Fix more edge cases and ancient bits
2 parents 765d82a + faab00d commit 287497c

File tree

10 files changed

+576926
-532949
lines changed

10 files changed

+576926
-532949
lines changed

grammar.js

+65-21
Original file line numberDiff line numberDiff line change
@@ -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-gi-zA-GI-Z0-9/:.*$]+/,
1576+
edit_descriptor: $ => choice('/', /[a-gi-zA-GI-Z0-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

Comments
 (0)