Skip to content

Commit 8249818

Browse files
committed
Better fix for include statements
- allow in more places - allow clashes with `identifier` For some reason beyond my ken, closing `include` with `$._end_of_statement` causes all sorts of issues, and so we close it with the much simpler "newline or semicolon" -- this still allows comments, but they now appear _in_ the include statement. Not ideal, but it works.
1 parent 4de6ccd commit 8249818

File tree

5 files changed

+555635
-550982
lines changed

5 files changed

+555635
-550982
lines changed

grammar.js

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ module.exports = grammar({
106106
),
107107

108108
_top_level_item: $ => prec(2, choice(
109-
seq($.include_statement, $._end_of_statement),
109+
$.include_statement,
110110
$.program,
111111
$.module,
112112
$.submodule,
@@ -285,7 +285,7 @@ module.exports = grammar({
285285
$.end_program_statement
286286
),
287287

288-
program_statement: $ => seq(caseInsensitive('program'), $._name),
288+
program_statement: $ => seq(caseInsensitive('program'), $._name, $._end_of_statement),
289289
end_program_statement: $ => blockStructureEnding($, 'program'),
290290

291291
module: $ => seq(
@@ -301,7 +301,7 @@ module.exports = grammar({
301301
$.end_module_statement
302302
),
303303

304-
module_statement: $ => seq(caseInsensitive('module'), $._name),
304+
module_statement: $ => seq(caseInsensitive('module'), $._name, $._end_of_statement),
305305
end_module_statement: $ => blockStructureEnding($, 'module'),
306306

307307
submodule: $ => seq(
@@ -325,7 +325,8 @@ module.exports = grammar({
325325
':', field('parent', $.module_name)
326326
)),
327327
')',
328-
$._name
328+
$._name,
329+
$._end_of_statement,
329330
),
330331
end_submodule_statement: $ => blockStructureEnding($, 'submodule'),
331332
module_name: $ => $._name,
@@ -334,6 +335,7 @@ module.exports = grammar({
334335
$.interface_statement,
335336
repeat(choice(
336337
$._interface_items,
338+
$.include_statement,
337339
$.preproc_include,
338340
$.preproc_def,
339341
$.preproc_function_def,
@@ -419,7 +421,8 @@ module.exports = grammar({
419421
caseInsensitive('subroutine'),
420422
field('name', $._name),
421423
optional(field('parameters',$._parameters)),
422-
optional($.language_binding)
424+
optional($.language_binding),
425+
$._end_of_statement,
423426
),
424427

425428
end_subroutine_statement: $ => blockStructureEnding($, 'subroutine'),
@@ -429,7 +432,8 @@ module.exports = grammar({
429432
module_procedure_statement: $ => seq(
430433
optional($._callable_interface_qualifers),
431434
seq(caseInsensitive('module'), caseInsensitive('procedure')),
432-
field('name', $._name)
435+
field('name', $._name),
436+
$._end_of_statement,
433437
),
434438

435439
end_module_procedure_statement: $ => blockStructureEnding($, 'procedure'),
@@ -444,7 +448,8 @@ module.exports = grammar({
444448
optional(repeat(choice(
445449
$.language_binding,
446450
$.function_result
447-
)))
451+
))),
452+
$._end_of_statement,
448453
),
449454

450455
language_binding: $ => seq(
@@ -520,7 +525,7 @@ module.exports = grammar({
520525
// Variable Declarations
521526

522527
_specification_part: $ => prec(1, choice(
523-
prec(1, seq($.include_statement, $._end_of_statement)),
528+
$.include_statement,
524529
seq($.use_statement, $._end_of_statement),
525530
seq($.implicit_statement, $._end_of_statement),
526531
seq($.save_statement, $._end_of_statement),
@@ -685,7 +690,7 @@ module.exports = grammar({
685690
alias(caseInsensitive('sequence'), $.sequence_statement),
686691
$._end_of_statement
687692
),
688-
seq($.include_statement, $._end_of_statement),
693+
$.include_statement,
689694
seq($.variable_declaration, $._end_of_statement),
690695
$.preproc_include,
691696
$.preproc_def,
@@ -740,6 +745,7 @@ module.exports = grammar({
740745
$.public_statement,
741746
$.private_statement,
742747
$.procedure_statement,
748+
$.include_statement,
743749
alias($.preproc_if_in_bound_procedures, $.preproc_if),
744750
alias($.preproc_ifdef_in_bound_procedures, $.preproc_ifdef),
745751
)),
@@ -1146,10 +1152,12 @@ module.exports = grammar({
11461152
)
11471153
),
11481154

1149-
include_statement: $ => seq(
1155+
include_statement: $ => prec(1, seq(
11501156
caseInsensitive('include'),
1151-
field("path", alias($.string_literal, $.filename))
1152-
),
1157+
field("path", alias($.string_literal, $.filename)),
1158+
// I do _not_ understand, but we can't use $._end_of_statement here for some reason
1159+
/\r?\n|;/
1160+
)),
11531161

11541162
data_statement: $ => seq(
11551163
caseInsensitive('data'),
@@ -2195,6 +2203,7 @@ module.exports = grammar({
21952203
caseInsensitive('format'),
21962204
caseInsensitive('go'),
21972205
caseInsensitive('if'),
2206+
prec(-1, caseInsensitive('include')),
21982207
caseInsensitive('inquire'),
21992208
caseInsensitive('intrinsic'),
22002209
caseInsensitive('kind'),
@@ -2378,7 +2387,6 @@ function preprocessor(command) {
23782387
function procedure($, start_statement, end_statement) {
23792388
return seq(
23802389
start_statement,
2381-
$._end_of_statement,
23822390
repeat(
23832391
choice(
23842392
$._specification_part,

src/grammar.json

Lines changed: 80 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,8 @@
3333
"type": "CHOICE",
3434
"members": [
3535
{
36-
"type": "SEQ",
37-
"members": [
38-
{
39-
"type": "SYMBOL",
40-
"name": "include_statement"
41-
},
42-
{
43-
"type": "SYMBOL",
44-
"name": "_end_of_statement"
45-
}
46-
]
36+
"type": "SYMBOL",
37+
"name": "include_statement"
4738
},
4839
{
4940
"type": "SYMBOL",
@@ -7224,6 +7215,10 @@
72247215
{
72257216
"type": "SYMBOL",
72267217
"name": "_name"
7218+
},
7219+
{
7220+
"type": "SYMBOL",
7221+
"name": "_end_of_statement"
72277222
}
72287223
]
72297224
},
@@ -7357,6 +7352,10 @@
73577352
{
73587353
"type": "SYMBOL",
73597354
"name": "_name"
7355+
},
7356+
{
7357+
"type": "SYMBOL",
7358+
"name": "_end_of_statement"
73607359
}
73617360
]
73627361
},
@@ -7531,6 +7530,10 @@
75317530
{
75327531
"type": "SYMBOL",
75337532
"name": "_name"
7533+
},
7534+
{
7535+
"type": "SYMBOL",
7536+
"name": "_end_of_statement"
75347537
}
75357538
]
75367539
},
@@ -7614,6 +7617,10 @@
76147617
"type": "SYMBOL",
76157618
"name": "_interface_items"
76167619
},
7620+
{
7621+
"type": "SYMBOL",
7622+
"name": "include_statement"
7623+
},
76177624
{
76187625
"type": "SYMBOL",
76197626
"name": "preproc_include"
@@ -8098,10 +8105,6 @@
80988105
"type": "SYMBOL",
80998106
"name": "subroutine_statement"
81008107
},
8101-
{
8102-
"type": "SYMBOL",
8103-
"name": "_end_of_statement"
8104-
},
81058108
{
81068109
"type": "REPEAT",
81078110
"content": {
@@ -8239,6 +8242,10 @@
82398242
"type": "BLANK"
82408243
}
82418244
]
8245+
},
8246+
{
8247+
"type": "SYMBOL",
8248+
"name": "_end_of_statement"
82428249
}
82438250
]
82448251
},
@@ -8309,10 +8316,6 @@
83098316
"type": "SYMBOL",
83108317
"name": "module_procedure_statement"
83118318
},
8312-
{
8313-
"type": "SYMBOL",
8314-
"name": "_end_of_statement"
8315-
},
83168319
{
83178320
"type": "REPEAT",
83188321
"content": {
@@ -8436,6 +8439,10 @@
84368439
"type": "SYMBOL",
84378440
"name": "_name"
84388441
}
8442+
},
8443+
{
8444+
"type": "SYMBOL",
8445+
"name": "_end_of_statement"
84398446
}
84408447
]
84418448
},
@@ -8506,10 +8513,6 @@
85068513
"type": "SYMBOL",
85078514
"name": "function_statement"
85088515
},
8509-
{
8510-
"type": "SYMBOL",
8511-
"name": "_end_of_statement"
8512-
},
85138516
{
85148517
"type": "REPEAT",
85158518
"content": {
@@ -8659,6 +8662,10 @@
86598662
"type": "BLANK"
86608663
}
86618664
]
8665+
},
8666+
{
8667+
"type": "SYMBOL",
8668+
"name": "_end_of_statement"
86628669
}
86638670
]
86648671
},
@@ -9116,21 +9123,8 @@
91169123
"type": "CHOICE",
91179124
"members": [
91189125
{
9119-
"type": "PREC",
9120-
"value": 1,
9121-
"content": {
9122-
"type": "SEQ",
9123-
"members": [
9124-
{
9125-
"type": "SYMBOL",
9126-
"name": "include_statement"
9127-
},
9128-
{
9129-
"type": "SYMBOL",
9130-
"name": "_end_of_statement"
9131-
}
9132-
]
9133-
}
9126+
"type": "SYMBOL",
9127+
"name": "include_statement"
91349128
},
91359129
{
91369130
"type": "SEQ",
@@ -10462,17 +10456,8 @@
1046210456
]
1046310457
},
1046410458
{
10465-
"type": "SEQ",
10466-
"members": [
10467-
{
10468-
"type": "SYMBOL",
10469-
"name": "include_statement"
10470-
},
10471-
{
10472-
"type": "SYMBOL",
10473-
"name": "_end_of_statement"
10474-
}
10475-
]
10459+
"type": "SYMBOL",
10460+
"name": "include_statement"
1047610461
},
1047710462
{
1047810463
"type": "SEQ",
@@ -10837,6 +10822,10 @@
1083710822
"type": "SYMBOL",
1083810823
"name": "procedure_statement"
1083910824
},
10825+
{
10826+
"type": "SYMBOL",
10827+
"name": "include_statement"
10828+
},
1084010829
{
1084110830
"type": "ALIAS",
1084210831
"content": {
@@ -13503,31 +13492,39 @@
1350313492
]
1350413493
},
1350513494
"include_statement": {
13506-
"type": "SEQ",
13507-
"members": [
13508-
{
13509-
"type": "ALIAS",
13510-
"content": {
13511-
"type": "PATTERN",
13512-
"value": "[iI][nN][cC][lL][uU][dD][eE]"
13513-
},
13514-
"named": false,
13515-
"value": "include"
13516-
},
13517-
{
13518-
"type": "FIELD",
13519-
"name": "path",
13520-
"content": {
13495+
"type": "PREC",
13496+
"value": 1,
13497+
"content": {
13498+
"type": "SEQ",
13499+
"members": [
13500+
{
1352113501
"type": "ALIAS",
1352213502
"content": {
13523-
"type": "SYMBOL",
13524-
"name": "string_literal"
13503+
"type": "PATTERN",
13504+
"value": "[iI][nN][cC][lL][uU][dD][eE]"
1352513505
},
13526-
"named": true,
13527-
"value": "filename"
13506+
"named": false,
13507+
"value": "include"
13508+
},
13509+
{
13510+
"type": "FIELD",
13511+
"name": "path",
13512+
"content": {
13513+
"type": "ALIAS",
13514+
"content": {
13515+
"type": "SYMBOL",
13516+
"name": "string_literal"
13517+
},
13518+
"named": true,
13519+
"value": "filename"
13520+
}
13521+
},
13522+
{
13523+
"type": "PATTERN",
13524+
"value": "\\r?\\n|;"
1352813525
}
13529-
}
13530-
]
13526+
]
13527+
}
1353113528
},
1353213529
"data_statement": {
1353313530
"type": "SEQ",
@@ -20454,6 +20451,19 @@
2045420451
"named": false,
2045520452
"value": "if"
2045620453
},
20454+
{
20455+
"type": "PREC",
20456+
"value": -1,
20457+
"content": {
20458+
"type": "ALIAS",
20459+
"content": {
20460+
"type": "PATTERN",
20461+
"value": "[iI][nN][cC][lL][uU][dD][eE]"
20462+
},
20463+
"named": false,
20464+
"value": "include"
20465+
}
20466+
},
2045720467
{
2045820468
"type": "ALIAS",
2045920469
"content": {

0 commit comments

Comments
 (0)