Add support for "or terminate" in select statements
This commit is contained in:
parent
d6ea15a3e0
commit
d52ba823fa
43
grammar.js
43
grammar.js
|
|
@ -579,7 +579,7 @@ module.exports = grammar({
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
actual_parameter_part: $ => seq(
|
actual_parameter_part: $ => seq( // ARM 6.4
|
||||||
'(',
|
'(',
|
||||||
choice(
|
choice(
|
||||||
comma_separated_list_of($.parameter_association),
|
comma_separated_list_of($.parameter_association),
|
||||||
|
|
@ -1355,7 +1355,7 @@ module.exports = grammar({
|
||||||
$.exception_handler,
|
$.exception_handler,
|
||||||
$.pragma_g,
|
$.pragma_g,
|
||||||
)),
|
)),
|
||||||
formal_part: $ => seq(
|
formal_part: $ => seq( // ARM 6.1
|
||||||
'(',
|
'(',
|
||||||
$._parameter_specification_list,
|
$._parameter_specification_list,
|
||||||
')',
|
')',
|
||||||
|
|
@ -1945,15 +1945,10 @@ module.exports = grammar({
|
||||||
$.access_definition,
|
$.access_definition,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|
||||||
// In general, we do not need a separate node in the tree for the
|
|
||||||
// sequence of statements, except when queries might make use of that.
|
|
||||||
_sequence_of_statements: $ => prec.left(seq(
|
_sequence_of_statements: $ => prec.left(seq(
|
||||||
repeat1($.statement),
|
repeat1($.statement),
|
||||||
repeat($.label),
|
repeat($.label),
|
||||||
)),
|
)),
|
||||||
// sequence_of_statements_as_node: $ => $.sequence_of_statements,
|
|
||||||
|
|
||||||
_simple_statement: $ => choice(
|
_simple_statement: $ => choice(
|
||||||
$.null_statement,
|
$.null_statement,
|
||||||
$.assignment_statement,
|
$.assignment_statement,
|
||||||
|
|
@ -2041,24 +2036,36 @@ module.exports = grammar({
|
||||||
field('condition', $.expression),
|
field('condition', $.expression),
|
||||||
'=>',
|
'=>',
|
||||||
),
|
),
|
||||||
_guard_select: $ => seq(
|
select_alternative: $ => choice( // ARM 9.7.1
|
||||||
$.guard,
|
$.accept_alternative,
|
||||||
$._select_alternative,
|
$.delay_alternative,
|
||||||
|
$.terminate_alternative,
|
||||||
),
|
),
|
||||||
_select_alternative: $ => seq(
|
accept_alternative: $ => seq( // ARM 9.7.1
|
||||||
$.accept_statement,
|
$.accept_statement,
|
||||||
optional($._sequence_of_statements),
|
optional($._sequence_of_statements),
|
||||||
),
|
),
|
||||||
selective_accept: $ => seq(
|
delay_alternative: $ => seq( // ARM 9.7.1
|
||||||
|
$._delay_statement,
|
||||||
|
optional($._sequence_of_statements),
|
||||||
|
),
|
||||||
|
terminate_alternative: $ => seq( // ARM 9.7.1
|
||||||
|
reservedWord("terminate"),
|
||||||
|
';',
|
||||||
|
),
|
||||||
|
selective_accept: $ => seq( // ARM 9.7.1
|
||||||
reservedWord('select'),
|
reservedWord('select'),
|
||||||
list_of(reservedWord('or'), $._guard_select),
|
list_of(reservedWord('or'), seq(
|
||||||
|
optional($.guard),
|
||||||
|
$.select_alternative,
|
||||||
|
)),
|
||||||
optional(seq(
|
optional(seq(
|
||||||
reservedWord('else'),
|
reservedWord('else'),
|
||||||
$._sequence_of_statements,
|
$._sequence_of_statements,
|
||||||
)),
|
)),
|
||||||
reservedWord('end'),
|
reservedWord('end'),
|
||||||
reservedWord('select'),
|
reservedWord('select'),
|
||||||
reservedWord(';'),
|
';',
|
||||||
),
|
),
|
||||||
abort_statement: $ => seq(
|
abort_statement: $ => seq(
|
||||||
reservedWord('abort'),
|
reservedWord('abort'),
|
||||||
|
|
@ -2074,20 +2081,20 @@ module.exports = grammar({
|
||||||
)),
|
)),
|
||||||
';',
|
';',
|
||||||
),
|
),
|
||||||
accept_statement: $ => seq(
|
accept_statement: $ => seq( // ARM 9.5.2
|
||||||
reservedWord('accept'),
|
reservedWord('accept'),
|
||||||
$.identifier,
|
field('entry_direct_name', $.identifier),
|
||||||
optional(seq(
|
optional(seq(
|
||||||
'(',
|
'(',
|
||||||
field('entry_index', $.expression),
|
field('entry_index', $.expression),
|
||||||
')',
|
')',
|
||||||
)),
|
)),
|
||||||
field('parameter_profile', optional($.formal_part)),
|
optional(field('parameter_profile', $.formal_part)),
|
||||||
optional(seq(
|
optional(seq(
|
||||||
reservedWord('do'),
|
reservedWord('do'),
|
||||||
$.handled_sequence_of_statements,
|
$.handled_sequence_of_statements,
|
||||||
reservedWord('end'),
|
reservedWord('end'),
|
||||||
optional($.identifier),
|
optional(field('entry_identifier', $.identifier)),
|
||||||
)),
|
)),
|
||||||
';',
|
';',
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
"out"
|
"out"
|
||||||
"pragma"
|
"pragma"
|
||||||
"renames"
|
"renames"
|
||||||
|
"terminate"
|
||||||
"when"
|
"when"
|
||||||
] @keyword
|
] @keyword
|
||||||
[
|
[
|
||||||
|
|
|
||||||
133
src/grammar.json
133
src/grammar.json
|
|
@ -12604,20 +12604,24 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_guard_select": {
|
"select_alternative": {
|
||||||
"type": "SEQ",
|
"type": "CHOICE",
|
||||||
"members": [
|
"members": [
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "guard"
|
"name": "accept_alternative"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "_select_alternative"
|
"name": "delay_alternative"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "terminate_alternative"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"_select_alternative": {
|
"accept_alternative": {
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
{
|
{
|
||||||
|
|
@ -12638,6 +12642,31 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"terminate_alternative": {
|
||||||
|
"type": "SEQ",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "ALIAS",
|
||||||
|
"content": {
|
||||||
|
"type": "TOKEN",
|
||||||
|
"content": {
|
||||||
|
"type": "PREC",
|
||||||
|
"value": 2,
|
||||||
|
"content": {
|
||||||
|
"type": "PATTERN",
|
||||||
|
"value": "[tT][eE][rR][mM][iI][nN][aA][tT][eE]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"named": false,
|
||||||
|
"value": "terminate"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "STRING",
|
||||||
|
"value": ";"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"selective_accept": {
|
"selective_accept": {
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
|
|
@ -12661,8 +12690,25 @@
|
||||||
"type": "SEQ",
|
"type": "SEQ",
|
||||||
"members": [
|
"members": [
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SEQ",
|
||||||
"name": "_guard_select"
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "guard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "BLANK"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "select_alternative"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "REPEAT",
|
"type": "REPEAT",
|
||||||
|
|
@ -12686,8 +12732,25 @@
|
||||||
"value": "or"
|
"value": "or"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "SEQ",
|
||||||
"name": "_guard_select"
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "CHOICE",
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "guard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "BLANK"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "select_alternative"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -12760,19 +12823,7 @@
|
||||||
"value": "select"
|
"value": "select"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "ALIAS",
|
"type": "STRING",
|
||||||
"content": {
|
|
||||||
"type": "TOKEN",
|
|
||||||
"content": {
|
|
||||||
"type": "PREC",
|
|
||||||
"value": 2,
|
|
||||||
"content": {
|
|
||||||
"type": "PATTERN",
|
|
||||||
"value": "[;;]"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"named": false,
|
|
||||||
"value": ";"
|
"value": ";"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -12925,8 +12976,12 @@
|
||||||
"value": "accept"
|
"value": "accept"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "FIELD",
|
||||||
"name": "identifier"
|
"name": "entry_direct_name",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "identifier"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "CHOICE",
|
"type": "CHOICE",
|
||||||
|
|
@ -12958,20 +13013,20 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "FIELD",
|
"type": "CHOICE",
|
||||||
"name": "parameter_profile",
|
"members": [
|
||||||
"content": {
|
{
|
||||||
"type": "CHOICE",
|
"type": "FIELD",
|
||||||
"members": [
|
"name": "parameter_profile",
|
||||||
{
|
"content": {
|
||||||
"type": "SYMBOL",
|
"type": "SYMBOL",
|
||||||
"name": "formal_part"
|
"name": "formal_part"
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "BLANK"
|
|
||||||
}
|
}
|
||||||
]
|
},
|
||||||
}
|
{
|
||||||
|
"type": "BLANK"
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "CHOICE",
|
"type": "CHOICE",
|
||||||
|
|
@ -13019,8 +13074,12 @@
|
||||||
"type": "CHOICE",
|
"type": "CHOICE",
|
||||||
"members": [
|
"members": [
|
||||||
{
|
{
|
||||||
"type": "SYMBOL",
|
"type": "FIELD",
|
||||||
"name": "identifier"
|
"name": "entry_identifier",
|
||||||
|
"content": {
|
||||||
|
"type": "SYMBOL",
|
||||||
|
"name": "identifier"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "BLANK"
|
"type": "BLANK"
|
||||||
|
|
|
||||||
|
|
@ -54,10 +54,53 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "accept_alternative",
|
||||||
|
"named": true,
|
||||||
|
"fields": {},
|
||||||
|
"children": {
|
||||||
|
"multiple": true,
|
||||||
|
"required": true,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "accept_statement",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "label",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "statement",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "accept_statement",
|
"type": "accept_statement",
|
||||||
"named": true,
|
"named": true,
|
||||||
"fields": {
|
"fields": {
|
||||||
|
"entry_direct_name": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": true,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "identifier",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"entry_identifier": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": false,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "identifier",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
"entry_index": {
|
"entry_index": {
|
||||||
"multiple": false,
|
"multiple": false,
|
||||||
"required": false,
|
"required": false,
|
||||||
|
|
@ -80,16 +123,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"children": {
|
"children": {
|
||||||
"multiple": true,
|
"multiple": false,
|
||||||
"required": true,
|
"required": false,
|
||||||
"types": [
|
"types": [
|
||||||
{
|
{
|
||||||
"type": "handled_sequence_of_statements",
|
"type": "handled_sequence_of_statements",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "identifier",
|
|
||||||
"named": true
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -8225,6 +8264,29 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "select_alternative",
|
||||||
|
"named": true,
|
||||||
|
"fields": {},
|
||||||
|
"children": {
|
||||||
|
"multiple": false,
|
||||||
|
"required": true,
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "accept_alternative",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "delay_alternative",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "terminate_alternative",
|
||||||
|
"named": true
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "selected_component",
|
"type": "selected_component",
|
||||||
"named": true,
|
"named": true,
|
||||||
|
|
@ -8307,10 +8369,6 @@
|
||||||
"multiple": true,
|
"multiple": true,
|
||||||
"required": true,
|
"required": true,
|
||||||
"types": [
|
"types": [
|
||||||
{
|
|
||||||
"type": "accept_statement",
|
|
||||||
"named": true
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "guard",
|
"type": "guard",
|
||||||
"named": true
|
"named": true
|
||||||
|
|
@ -8319,6 +8377,10 @@
|
||||||
"type": "label",
|
"type": "label",
|
||||||
"named": true
|
"named": true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "select_alternative",
|
||||||
|
"named": true
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "statement",
|
"type": "statement",
|
||||||
"named": true
|
"named": true
|
||||||
|
|
@ -9399,6 +9461,11 @@
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "terminate_alternative",
|
||||||
|
"named": true,
|
||||||
|
"fields": {}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "timed_entry_call",
|
"type": "timed_entry_call",
|
||||||
"named": true,
|
"named": true,
|
||||||
|
|
@ -10082,6 +10149,10 @@
|
||||||
"type": "task",
|
"type": "task",
|
||||||
"named": false
|
"named": false
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"type": "terminate",
|
||||||
|
"named": false
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "then",
|
"type": "then",
|
||||||
"named": false
|
"named": false
|
||||||
|
|
|
||||||
61017
src/parser.c
61017
src/parser.c
File diff suppressed because it is too large
Load Diff
|
|
@ -198,3 +198,53 @@ end;
|
||||||
(statement
|
(statement
|
||||||
(procedure_call_statement
|
(procedure_call_statement
|
||||||
(identifier)))))
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Accept
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
accept Start (A : Integer; B : Integer) do
|
||||||
|
null;
|
||||||
|
end Start;
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(compilation
|
||||||
|
(compilation_unit
|
||||||
|
(statement
|
||||||
|
(accept_statement
|
||||||
|
(identifier)
|
||||||
|
(formal_part
|
||||||
|
(parameter_specification
|
||||||
|
(identifier)
|
||||||
|
(identifier))
|
||||||
|
(parameter_specification
|
||||||
|
(identifier)
|
||||||
|
(identifier)))
|
||||||
|
(handled_sequence_of_statements
|
||||||
|
(statement
|
||||||
|
(null_statement)))
|
||||||
|
(identifier)))))
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
Select terminate
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
select
|
||||||
|
accept Start;
|
||||||
|
or
|
||||||
|
terminate;
|
||||||
|
end select;
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
(compilation
|
||||||
|
(compilation_unit
|
||||||
|
(statement
|
||||||
|
(selective_accept
|
||||||
|
(select_alternative
|
||||||
|
(accept_alternative
|
||||||
|
(accept_statement
|
||||||
|
(identifier))))
|
||||||
|
(select_alternative
|
||||||
|
(terminate_alternative))))))
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user