Add support for slices

This commit is contained in:
Emmanuel Briot 2022-12-13 12:29:02 +01:00
parent 30545542d7
commit c25792f45c
11 changed files with 37050 additions and 35850 deletions

View File

@ -53,6 +53,9 @@ module.exports = grammar({
// 'case' '(' identifier . '=>' ... // 'case' '(' identifier . '=>' ...
[$._name, $.component_choice_list], [$._name, $.component_choice_list],
// 'case' '(' _name '(' _discrete_range ')' . '=>'
[$.slice, $._discrete_range],
// 'case' '(' expression . ',' ... // 'case' '(' expression . ',' ...
[$.record_component_association_list, $.positional_array_aggregate], [$.record_component_association_list, $.positional_array_aggregate],
@ -99,8 +102,13 @@ module.exports = grammar({
[$.function_call, $.procedure_call_statement], [$.function_call, $.procedure_call_statement],
[$._name, $._aspect_mark], [$._name, $._aspect_mark],
[$._name, $.package_body_stub], [$._name, $.package_body_stub],
[$._name, $._subtype_indication],
[$._name, $._subtype_indication, $.component_choice_list],
[$.attribute_definition_clause, $._attribute_reference], [$.attribute_definition_clause, $._attribute_reference],
], ],
inline: $ => [
$._name_not_function_call,
],
rules: { rules: {
compilation: $ => repeat( compilation: $ => repeat(
@ -124,18 +132,22 @@ module.exports = grammar({
multiplying_operator: $ => choice('*', '/', 'mod', 'rem'), multiplying_operator: $ => choice('*', '/', 'mod', 'rem'),
tick: $ => '\'', // But is not the start of a character_literal tick: $ => '\'', // But is not the start of a character_literal
_name: $ => choice( // RM 4.1 _name_not_function_call: $ => choice( // RM 4.1
$.identifier, $.identifier,
$.selected_component, // rule is inlined above $.selected_component,
$._attribute_reference, $._attribute_reference,
$.function_call,
$.qualified_expression, $.qualified_expression,
$.target_name, $.target_name,
$.slice,
// $.explicit_dereference, // covered by $.selected_component // $.explicit_dereference, // covered by $.selected_component
$.character_literal, $.character_literal,
$.string_literal, // name of an operator. However, in a number of $.string_literal, // name of an operator. However, in a number of
// places using a string doesn't make sense. // places using a string doesn't make sense.
), ),
_name: $ => choice( // RM 4.1
$._name_not_function_call,
$.function_call,
),
selected_component: $ => prec.left(seq( // RM 4.1.3 selected_component: $ => prec.left(seq( // RM 4.1.3
field('prefix', $._name), field('prefix', $._name),
seq( seq(
@ -150,6 +162,15 @@ module.exports = grammar({
target_name: $ => '@', // RM 5.2.1 target_name: $ => '@', // RM 5.2.1
_name_list: $ => prec.left(comma_separated_list_of($._name)), _name_list: $ => prec.left(comma_separated_list_of($._name)),
_defining_identifier_list: $ => comma_separated_list_of($.identifier), _defining_identifier_list: $ => comma_separated_list_of($.identifier),
slice: $ => seq( // RM 4.1.2
field('prefix', $._name),
'(',
$.range_g, // ??? Should be a $._discrete_range, but then the
// following Proc(Arr (1 .. 2)) is parsed as a slice of
// Proc, using a subtype_indication "Arr (1..2)"
// $._discrete_range,
')',
),
_attribute_reference: $ => choice( _attribute_reference: $ => choice(
seq( seq(
@ -242,17 +263,13 @@ module.exports = grammar({
field('iterator_name', $._name), field('iterator_name', $._name),
optional($.iterator_filter), optional($.iterator_filter),
), ),
attribute_designator: $ => choice( attribute_designator: $ => choice( // ARM 4.1.4
$.identifier, // missing function_call $.identifier,
reservedWord('access'), reservedWord('access'),
reservedWord('delta'), reservedWord('delta'),
reservedWord('digits'), reservedWord('digits'),
reservedWord('mod'), reservedWord('mod'),
), ),
function_call: $ => seq( // ARM 6.4
field('name', $._name),
$.actual_parameter_part, // should be optional, but covered by _name
),
qualified_expression: $ => seq( // ARM 4.7 qualified_expression: $ => seq( // ARM 4.7
field('subtype_name', $._name), field('subtype_name', $._name),
$.tick, $.tick,
@ -370,7 +387,7 @@ module.exports = grammar({
), ),
_subtype_indication: $ => seq( // ARM 3.2.2 _subtype_indication: $ => seq( // ARM 3.2.2
optional($.null_exclusion), optional($.null_exclusion),
field('subtype_mark', $._name), field('subtype_mark', $._name_not_function_call),
optional($._constraint), optional($._constraint),
), ),
_constraint: $ => choice( _constraint: $ => choice(
@ -870,7 +887,7 @@ module.exports = grammar({
$._subtype_indication, $._subtype_indication,
$.range_g, $.range_g,
), ),
_discrete_range: $ => choice( // same as _discrete_subtype_definition _discrete_range: $ => choice( // 3.6.1 == _discrete_subtype_definition
$._subtype_indication, $._subtype_indication,
$.range_g, $.range_g,
), ),
@ -2197,11 +2214,21 @@ module.exports = grammar({
$._subtype_indication, $._subtype_indication,
$.access_definition, $.access_definition,
), ),
procedure_call_statement: $ => seq( // ARM 6.4 procedure_call_statement: $ => choice( // ARM 6.4
field('name', $._name), seq(
optional($.actual_parameter_part), field('name', $._name_not_function_call),
';', ';',
), ),
seq(
field('name', $._name), // includes function_call
$.actual_parameter_part,
';',
),
),
function_call: $ => seq( // ARM 6.4
field('name', $._name), // itself includes a function_call
$.actual_parameter_part, // should be optional, but covered by _name
),
raise_statement: $ => seq( raise_statement: $ => seq(
reservedWord('raise'), reservedWord('raise'),
optional(seq( optional(seq(

View File

@ -123,6 +123,7 @@
(loop_parameter_specification "in" @keyword.repeat) (loop_parameter_specification "in" @keyword.repeat)
(iterator_specification ["in" "of"] @keyword.repeat) (iterator_specification ["in" "of"] @keyword.repeat)
(range_attribute_designator "range" @keyword.repeat) (range_attribute_designator "range" @keyword.repeat)
(raise_statement "with" @exception) (raise_statement "with" @exception)
(subprogram_declaration "is" @keyword.function "abstract" @keyword.function) (subprogram_declaration "is" @keyword.function "abstract" @keyword.function)
@ -150,9 +151,9 @@
(expression_function_declaration (expression_function_declaration
(function_specification) (function_specification)
"is" "is"
(_) @function.expression (_) @attribute
) )
(subprogram_declaration (aspect_specification) @function.expression) (subprogram_declaration (aspect_specification) @attribute)
;; Highlight full subprogram specifications ;; Highlight full subprogram specifications
;(subprogram_body ;(subprogram_body

View File

@ -143,7 +143,7 @@
"type": "STRING", "type": "STRING",
"value": "'" "value": "'"
}, },
"_name": { "_name_not_function_call": {
"type": "CHOICE", "type": "CHOICE",
"members": [ "members": [
{ {
@ -158,10 +158,6 @@
"type": "SYMBOL", "type": "SYMBOL",
"name": "_attribute_reference" "name": "_attribute_reference"
}, },
{
"type": "SYMBOL",
"name": "function_call"
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "qualified_expression" "name": "qualified_expression"
@ -170,6 +166,10 @@
"type": "SYMBOL", "type": "SYMBOL",
"name": "target_name" "name": "target_name"
}, },
{
"type": "SYMBOL",
"name": "slice"
},
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "character_literal" "name": "character_literal"
@ -180,6 +180,19 @@
} }
] ]
}, },
"_name": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_name_not_function_call"
},
{
"type": "SYMBOL",
"name": "function_call"
}
]
},
"selected_component": { "selected_component": {
"type": "PREC_LEFT", "type": "PREC_LEFT",
"value": 0, "value": 0,
@ -285,6 +298,31 @@
} }
] ]
}, },
"slice": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "prefix",
"content": {
"type": "SYMBOL",
"name": "_name"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "range_g"
},
{
"type": "STRING",
"value": ")"
}
]
},
"_attribute_reference": { "_attribute_reference": {
"type": "CHOICE", "type": "CHOICE",
"members": [ "members": [
@ -858,23 +896,6 @@
} }
] ]
}, },
"function_call": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_name"
}
},
{
"type": "SYMBOL",
"name": "actual_parameter_part"
}
]
},
"qualified_expression": { "qualified_expression": {
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
@ -1732,7 +1753,7 @@
"name": "subtype_mark", "name": "subtype_mark",
"content": { "content": {
"type": "SYMBOL", "type": "SYMBOL",
"name": "_name" "name": "_name_not_function_call"
} }
}, },
{ {
@ -13944,6 +13965,26 @@
] ]
}, },
"procedure_call_statement": { "procedure_call_statement": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "_name_not_function_call"
}
},
{
"type": "STRING",
"value": ";"
}
]
},
{
"type": "SEQ", "type": "SEQ",
"members": [ "members": [
{ {
@ -13954,21 +13995,32 @@
"name": "_name" "name": "_name"
} }
}, },
{
"type": "CHOICE",
"members": [
{ {
"type": "SYMBOL", "type": "SYMBOL",
"name": "actual_parameter_part" "name": "actual_parameter_part"
}, },
{ {
"type": "BLANK" "type": "STRING",
"value": ";"
}
]
} }
] ]
}, },
"function_call": {
"type": "SEQ",
"members": [
{ {
"type": "STRING", "type": "FIELD",
"value": ";" "name": "name",
"content": {
"type": "SYMBOL",
"name": "_name"
}
},
{
"type": "SYMBOL",
"name": "actual_parameter_part"
} }
] ]
}, },
@ -14612,6 +14664,14 @@
"at_clause", "at_clause",
"_name" "_name"
], ],
[
"_name",
"component_choice_list"
],
[
"slice",
"_discrete_range"
],
[ [
"record_component_association_list", "record_component_association_list",
"positional_array_aggregate" "positional_array_aggregate"
@ -14677,6 +14737,15 @@
"_name", "_name",
"package_body_stub" "package_body_stub"
], ],
[
"_name",
"_subtype_indication"
],
[
"_name",
"_subtype_indication",
"component_choice_list"
],
[ [
"attribute_definition_clause", "attribute_definition_clause",
"_attribute_reference" "_attribute_reference"

View File

@ -35,6 +35,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -249,6 +253,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -323,6 +331,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -467,6 +479,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -568,6 +584,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -719,6 +739,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -918,6 +942,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -1245,6 +1273,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -1648,6 +1680,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -1741,6 +1777,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -2171,6 +2211,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -2246,6 +2290,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -2328,6 +2376,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -2433,6 +2485,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -2830,6 +2886,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -2928,6 +2988,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -3041,6 +3105,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -3126,6 +3194,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -3327,6 +3399,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -3407,6 +3483,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -3569,6 +3649,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -3701,6 +3785,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -3823,6 +3911,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -4013,6 +4105,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -4063,6 +4159,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -4181,6 +4281,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -4321,6 +4425,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -4475,6 +4583,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -4526,6 +4638,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -4596,6 +4712,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -4704,6 +4824,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -4795,6 +4919,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -4992,6 +5120,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -5058,6 +5190,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -5172,6 +5308,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -5222,6 +5362,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -5311,6 +5455,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -5361,6 +5509,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -5411,6 +5563,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -5461,6 +5617,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -5577,6 +5737,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -5658,6 +5822,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -6112,6 +6280,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -6198,6 +6370,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -6254,6 +6430,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -6378,6 +6558,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -6428,6 +6612,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -6569,6 +6757,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -7099,6 +7291,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -7205,6 +7401,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -7255,6 +7455,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -7357,6 +7561,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -7407,6 +7615,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -7500,6 +7712,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -7550,6 +7766,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -7616,6 +7836,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -7666,6 +7890,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -7855,6 +8083,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -8015,6 +8247,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -8094,6 +8330,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -8180,6 +8420,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -8246,6 +8490,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -8445,6 +8693,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -8500,6 +8752,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -8637,6 +8893,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -8711,6 +8971,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -8807,6 +9071,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -9005,6 +9273,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -9055,6 +9327,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -9163,6 +9439,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -9250,6 +9530,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -9306,6 +9590,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -9399,6 +9687,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -9630,6 +9922,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -9689,6 +9985,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -9712,6 +10012,76 @@
] ]
} }
}, },
{
"type": "slice",
"named": true,
"fields": {
"prefix": {
"multiple": true,
"required": true,
"types": [
{
"type": "attribute_designator",
"named": true
},
{
"type": "character_literal",
"named": true
},
{
"type": "function_call",
"named": true
},
{
"type": "identifier",
"named": true
},
{
"type": "qualified_expression",
"named": true
},
{
"type": "reduction_attribute_designator",
"named": true
},
{
"type": "selected_component",
"named": true
},
{
"type": "slice",
"named": true
},
{
"type": "string_literal",
"named": true
},
{
"type": "target_name",
"named": true
},
{
"type": "tick",
"named": true
},
{
"type": "value_sequence",
"named": true
}
]
}
},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "range_g",
"named": true
}
]
}
},
{ {
"type": "subpool_specification", "type": "subpool_specification",
"named": true, "named": true,
@ -9748,6 +10118,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -9804,6 +10178,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -9959,6 +10337,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -10015,6 +10397,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -10093,6 +10479,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -10183,6 +10573,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -10357,6 +10751,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -10416,6 +10814,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -10712,6 +11114,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -10871,6 +11277,10 @@
"type": "selected_component", "type": "selected_component",
"named": true "named": true
}, },
{
"type": "slice",
"named": true
},
{ {
"type": "string_literal", "type": "string_literal",
"named": true "named": true
@ -10986,6 +11396,10 @@
"type": ">>", "type": ">>",
"named": false "named": false
}, },
{
"type": "Class",
"named": false
},
{ {
"type": "[", "type": "[",
"named": false "named": false

72179
src/parser.c

File diff suppressed because it is too large Load Diff

View File

@ -247,3 +247,43 @@ end;
(expression (expression
(term (term
(identifier)))))))))))))))))) (identifier))))))))))))))))))
================================================================================
Slices
================================================================================
Proc (Arr (1 .. 2));
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(procedure_call_statement
(identifier)
(actual_parameter_part
(parameter_association
(expression
(term
(slice
(identifier)
(range_g
(term
(numeric_literal))
(term
(numeric_literal)))))))))))
================================================================================
Slices with subtype declaration
================================================================================
A : Arr (Boolean);
--------------------------------------------------------------------------------
(compilation
(compilation_unit
(object_declaration
(identifier)
(identifier)
(index_constraint
(identifier)))))

View File

@ -23,8 +23,8 @@ end;
(non_empty_declarative_part (non_empty_declarative_part
(object_declaration (object_declaration
(identifier) (identifier)
(slice
(identifier) (identifier)
(index_constraint
(range_g (range_g
(identifier) (identifier)
(tick) (tick)

View File

@ -405,13 +405,9 @@ end;
(case_statement_alternative (case_statement_alternative
(discrete_choice_list (discrete_choice_list
(discrete_choice (discrete_choice
(expression (character_literal))
(term
(character_literal))))
(discrete_choice (discrete_choice
(expression (character_literal)))
(term
(character_literal)))))
(null_statement))))))) (null_statement)))))))
================================================================================ ================================================================================

View File

@ -521,3 +521,32 @@ Subprogram and field access
(term (term
(numeric_literal)))))) (numeric_literal))))))
(identifier))))))) (identifier)))))))
===============================
Parameterless Procedure call
===============================
Proc;
------
(compilation
(compilation_unit
(procedure_call_statement
(identifier))))
===============================
Parameterless Function call
===============================
A := Func;
------
(compilation
(compilation_unit
(assignment_statement
(identifier)
(expression
(term
(identifier))))))

View File

@ -169,13 +169,12 @@ end;
(asynchronous_select (asynchronous_select
(triggering_alternative (triggering_alternative
(procedure_call_statement (procedure_call_statement
(function_call
(identifier) (identifier)
(actual_parameter_part (actual_parameter_part
(parameter_association (parameter_association
(expression (expression
(term (term
(numeric_literal))))))) (numeric_literal))))))
(null_statement)) (null_statement))
(procedure_call_statement (procedure_call_statement
(identifier)))))))) (identifier))))))))

View File

@ -146,18 +146,14 @@ end P;
(array_component_association (array_component_association
(discrete_choice_list (discrete_choice_list
(discrete_choice (discrete_choice
(expression (identifier)))
(term
(identifier)))))
(expression (expression
(term (term
(numeric_literal)))) (numeric_literal))))
(array_component_association (array_component_association
(discrete_choice_list (discrete_choice_list
(discrete_choice (discrete_choice
(expression (identifier)))
(term
(identifier)))))
(expression (expression
(term (term
(numeric_literal))))))) (numeric_literal)))))))