Skip to content

Commit fddec9e

Browse files
committed
Add if_clause
This lets us visit the first line of a `block_if_statement` as a single node. It also ensures that the statements inside the `if` appear as children of the construct in the AST.
1 parent aa449f2 commit fddec9e

File tree

7 files changed

+616534
-617063
lines changed

7 files changed

+616534
-617063
lines changed

grammar.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,6 @@ module.exports = grammar({
9090
[$.data_statement, $.identifier],
9191
[$.data_value, $._expression],
9292
[$.else_clause],
93-
[$.elseif_clause, $.identifier],
9493
[$.elseif_clause],
9594
[$.elsewhere_clause],
9695
[$.intrinsic_type],
@@ -104,6 +103,7 @@ module.exports = grammar({
104103
[$.preproc_if_in_specification_part, $.program],
105104
[$._preproc_expression, $._expression],
106105
[$.coarray_critical_statement, $.identifier],
106+
[$.block_if_clause],
107107
],
108108

109109
rules: {
@@ -1338,17 +1338,25 @@ module.exports = grammar({
13381338
)),
13391339

13401340
block_if_statement: $ => seq(
1341+
$.block_if_clause,
1342+
repeat($.elseif_clause),
1343+
optional($.else_clause),
1344+
optional($.statement_label),
1345+
$.end_if_statement
1346+
),
1347+
1348+
block_if_clause: $ => seq(
1349+
$.if_clause,
1350+
$.end_of_statement,
1351+
repeat($._statement),
1352+
),
1353+
1354+
if_clause: $ => seq(
13411355
optional($.block_label_start_expression),
13421356
caseInsensitive('if'),
13431357
$._parenthesized_expression,
13441358
caseInsensitive('then'),
13451359
optional($._block_label),
1346-
$.end_of_statement,
1347-
repeat($._statement),
1348-
repeat($.elseif_clause),
1349-
optional($.else_clause),
1350-
optional($.statement_label),
1351-
$.end_if_statement
13521360
),
13531361

13541362
end_if_statement: $ => seq(

src/grammar.json

Lines changed: 59 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -14663,46 +14663,35 @@
1466314663
"block_if_statement": {
1466414664
"type": "SEQ",
1466514665
"members": [
14666+
{
14667+
"type": "SYMBOL",
14668+
"name": "block_if_clause"
14669+
},
14670+
{
14671+
"type": "REPEAT",
14672+
"content": {
14673+
"type": "SYMBOL",
14674+
"name": "elseif_clause"
14675+
}
14676+
},
1466614677
{
1466714678
"type": "CHOICE",
1466814679
"members": [
1466914680
{
1467014681
"type": "SYMBOL",
14671-
"name": "block_label_start_expression"
14682+
"name": "else_clause"
1467214683
},
1467314684
{
1467414685
"type": "BLANK"
1467514686
}
1467614687
]
1467714688
},
14678-
{
14679-
"type": "ALIAS",
14680-
"content": {
14681-
"type": "PATTERN",
14682-
"value": "[iI][fF]"
14683-
},
14684-
"named": false,
14685-
"value": "if"
14686-
},
14687-
{
14688-
"type": "SYMBOL",
14689-
"name": "_parenthesized_expression"
14690-
},
14691-
{
14692-
"type": "ALIAS",
14693-
"content": {
14694-
"type": "PATTERN",
14695-
"value": "[tT][hH][eE][nN]"
14696-
},
14697-
"named": false,
14698-
"value": "then"
14699-
},
1470014689
{
1470114690
"type": "CHOICE",
1470214691
"members": [
1470314692
{
1470414693
"type": "SYMBOL",
14705-
"name": "_block_label"
14694+
"name": "statement_label"
1470614695
},
1470714696
{
1470814697
"type": "BLANK"
@@ -14711,49 +14700,78 @@
1471114700
},
1471214701
{
1471314702
"type": "SYMBOL",
14714-
"name": "end_of_statement"
14703+
"name": "end_if_statement"
14704+
}
14705+
]
14706+
},
14707+
"block_if_clause": {
14708+
"type": "SEQ",
14709+
"members": [
14710+
{
14711+
"type": "SYMBOL",
14712+
"name": "if_clause"
1471514713
},
1471614714
{
14717-
"type": "REPEAT",
14718-
"content": {
14719-
"type": "SYMBOL",
14720-
"name": "_statement"
14721-
}
14715+
"type": "SYMBOL",
14716+
"name": "end_of_statement"
1472214717
},
1472314718
{
1472414719
"type": "REPEAT",
1472514720
"content": {
1472614721
"type": "SYMBOL",
14727-
"name": "elseif_clause"
14722+
"name": "_statement"
1472814723
}
14729-
},
14724+
}
14725+
]
14726+
},
14727+
"if_clause": {
14728+
"type": "SEQ",
14729+
"members": [
1473014730
{
1473114731
"type": "CHOICE",
1473214732
"members": [
1473314733
{
1473414734
"type": "SYMBOL",
14735-
"name": "else_clause"
14735+
"name": "block_label_start_expression"
1473614736
},
1473714737
{
1473814738
"type": "BLANK"
1473914739
}
1474014740
]
1474114741
},
14742+
{
14743+
"type": "ALIAS",
14744+
"content": {
14745+
"type": "PATTERN",
14746+
"value": "[iI][fF]"
14747+
},
14748+
"named": false,
14749+
"value": "if"
14750+
},
14751+
{
14752+
"type": "SYMBOL",
14753+
"name": "_parenthesized_expression"
14754+
},
14755+
{
14756+
"type": "ALIAS",
14757+
"content": {
14758+
"type": "PATTERN",
14759+
"value": "[tT][hH][eE][nN]"
14760+
},
14761+
"named": false,
14762+
"value": "then"
14763+
},
1474214764
{
1474314765
"type": "CHOICE",
1474414766
"members": [
1474514767
{
1474614768
"type": "SYMBOL",
14747-
"name": "statement_label"
14769+
"name": "_block_label"
1474814770
},
1474914771
{
1475014772
"type": "BLANK"
1475114773
}
1475214774
]
14753-
},
14754-
{
14755-
"type": "SYMBOL",
14756-
"name": "end_if_statement"
1475714775
}
1475814776
]
1475914777
},
@@ -20729,10 +20747,6 @@
2072920747
[
2073020748
"else_clause"
2073120749
],
20732-
[
20733-
"elseif_clause",
20734-
"identifier"
20735-
],
2073620750
[
2073720751
"elseif_clause"
2073820752
],
@@ -20778,6 +20792,9 @@
2077820792
[
2077920793
"coarray_critical_statement",
2078020794
"identifier"
20795+
],
20796+
[
20797+
"block_if_clause"
2078120798
]
2078220799
],
2078320800
"precedences": [],

0 commit comments

Comments
 (0)