Change definition of name_list and defining_identifier_list

This solves conflicts
This commit is contained in:
Emmanuel Briot 2022-10-21 14:30:34 +02:00
parent 51a69f0fb4
commit 8f3c5919a7
3 changed files with 200 additions and 239 deletions

View File

@ -15,50 +15,35 @@ use Ada.Text_IO, System;
(with_clause (with_clause
(name_list (name_list
(name (name
(selected_component (identifier)
(identifier))
(name (name
(direct_name
(identifier)))
(selector_name
(direct_name
(identifier))))) (identifier)))))
(name
(direct_name
(identifier))))))
(comment) (comment)
(compilation_unit (compilation_unit
(with_clause (with_clause
(name_list (name_list
(name (name
(direct_name (identifier)))))
(identifier))))))
(comment) (comment)
(compilation_unit (compilation_unit
(with_clause (with_clause
(name_list (name_list
(name (name
(direct_name (identifier)))))
(identifier))))))
(compilation_unit (compilation_unit
(with_clause (with_clause
(name_list (name_list
(name (name
(direct_name (identifier)))))
(identifier))))))
(compilation_unit (compilation_unit
(use_clause (use_clause
(name_list (name_list
(name (name
(selected_component (identifier)
(identifier))
(name (name
(direct_name (identifier))))))
(identifier)))
(selector_name
(direct_name
(identifier)))))
(name
(direct_name
(identifier)))))))
===== =====
Case insensitive Case insensitive
@ -72,7 +57,8 @@ enD;
(compilation (compilation
(compilation_unit (compilation_unit
(package_specification (package_specification
(name)))) (name
(identifier)))))
================================================================================ ================================================================================
multiple compilation units multiple compilation units
@ -93,28 +79,19 @@ end;
(compilation_unit (compilation_unit
(package_specification (package_specification
(name (name
(direct_name (identifier))
(identifier)))
(package_specification (package_specification
(name (name
(direct_name (identifier))
(name
(identifier))) (identifier)))
(name (name
(direct_name
(identifier)))) (identifier))))
(name
(direct_name
(identifier)))))
(compilation_unit (compilation_unit
(package_specification (package_specification
(name (name
(selected_component (identifier)
(name (identifier))
(direct_name
(identifier)))
(selector_name
(direct_name
(identifier)))))
(comment)))) (comment))))
========= =========
@ -136,41 +113,29 @@ end Child.P2;
(proper_body (proper_body
(package_body (package_body
(name (name
(selected_component (identifier)
(name (identifier))
(direct_name
(identifier)))
(selector_name
(direct_name
(identifier)))))
(non_empty_declarative_part (non_empty_declarative_part
(declarative_item_pragma (declarative_item_pragma
(proper_body (proper_body
(package_body (package_body
(name (name
(direct_name (identifier))
(identifier)))
(handled_sequence_of_statements (handled_sequence_of_statements
(sequence_of_statements (sequence_of_statements
(statement (statement
(simple_statement (simple_statement
(null_statement))))) (null_statement)))))
(name (name
(direct_name (identifier))))))
(identifier)))))))
(handled_sequence_of_statements (handled_sequence_of_statements
(sequence_of_statements (sequence_of_statements
(statement (statement
(simple_statement (simple_statement
(null_statement))))) (null_statement)))))
(name (name
(selected_component (identifier)
(name (identifier))))))
(direct_name
(identifier)))
(selector_name
(direct_name
(identifier)))))))))
================================================================================ ================================================================================
separate separate
@ -185,10 +150,8 @@ end;
(compilation_unit (compilation_unit
(subunit (subunit
(name (name
(direct_name (identifier))
(identifier)))
(proper_body (proper_body
(package_body (package_body
(name (name
(direct_name (identifier)))))))
(identifier))))))))

View File

@ -12,8 +12,7 @@ end P;
(compilation_unit (compilation_unit
(package_specification (package_specification
(name (name
(direct_name (identifier))
(identifier)))
(type_declaration (type_declaration
(full_type_declaration (full_type_declaration
(identifier) (identifier)
@ -31,8 +30,7 @@ end P;
(primary (primary
(numeric_literal)))))))))) (numeric_literal))))))))))
(name (name
(direct_name (identifier)))))
(identifier))))))
================================================================================ ================================================================================
Derived type Derived type
@ -48,8 +46,7 @@ end P;
(compilation_unit (compilation_unit
(package_specification (package_specification
(name (name
(direct_name (identifier))
(identifier)))
(type_declaration (type_declaration
(full_type_declaration (full_type_declaration
(identifier) (identifier)
@ -57,8 +54,6 @@ end P;
(derived_type_definition (derived_type_definition
(subtype_indication (subtype_indication
(name (name
(direct_name (identifier)))))))
(identifier))))))))
(name (name
(direct_name (identifier)))))
(identifier))))))

View File

@ -1,18 +1,15 @@
function toCaseInsensitive(a) { /**
var ca = a.charCodeAt(0); * A case-insensitive keyword (copied from VHDL grammar)
if (ca>=97 && ca<=122) return `[${a}${a.toUpperCase()}]`; */
if (ca>=65 && ca<= 90) return `[${a.toLowerCase()}${a}]`; const reservedWord = word =>
return a; // word || // when debugging conflict error msgs
} alias(reserved(caseInsensitive(word)), word)
;
function caseInsensitive(keyword) { const reserved = regex => token(prec(2, new RegExp(regex)));
//return keyword; // Easier to read conflict messages const caseInsensitive = word =>
return new RegExp(keyword word.split('')
.split('') .map(letter => `[${letter}${letter.toUpperCase()}]`)
.map(toCaseInsensitive) .join('');
.join('')
)
}
/** /**
* A list of rules * A list of rules
@ -42,13 +39,9 @@ module.exports = grammar({
$.comment, $.comment,
], ],
// word: $ => $.keyword,
word: $ => $.identifier, word: $ => $.identifier,
conflicts: $ => [ conflicts: $ => [
// "name" can be either a simple name, or a defining_identifier_list
// [$.direct_name, $.defining_identifier_list],
// "function_specification is" could be either an expression function // "function_specification is" could be either an expression function
// specification, or a function specification // specification, or a function specification
// ??? Maybe we can merge both in the grammar // ??? Maybe we can merge both in the grammar
@ -57,7 +50,7 @@ module.exports = grammar({
// ??? Maybe we can merge these // ??? Maybe we can merge these
[$.null_procedure_declaration, $.subprogram_specification], [$.null_procedure_declaration, $.subprogram_specification],
// "'for' direct_name * 'use'" could also be "'for' name * 'use'" as // "'for' _direct_name * 'use'" could also be "'for' name * 'use'" as
// specified in at_clause. // specified in at_clause.
[$.at_clause, $.name], [$.at_clause, $.name],
@ -78,7 +71,6 @@ module.exports = grammar({
$.compilation_unit, $.compilation_unit,
), ),
keyword: $ => /[a-zA-Z]+/,
identifier: $ => identifier: $ =>
/[a-zA-Z\u{80}-\u{10FFFF}][0-9a-zA-Z_\u{80}-\u{10FFFF}]*/u, /[a-zA-Z\u{80}-\u{10FFFF}][0-9a-zA-Z_\u{80}-\u{10FFFF}]*/u,
comment: $ => token(seq('--', /.*/)), comment: $ => token(seq('--', /.*/)),
@ -86,8 +78,7 @@ module.exports = grammar({
character_literal: $ => token(/'.'/), character_literal: $ => token(/'.'/),
numeric_literal: $ => token( numeric_literal: $ => token(
choice( choice(
/[0-9]/, /[0-9][0-9_]*(\.[0-9]+)?([eE][0-9_-]+)?/,
/[0-9_]+(\.[0-9]+)?([eE][0-9_-]+)?/,
/[0-9]+#[0-9a-fA-F._-]+#/ /[0-9]+#[0-9a-fA-F._-]+#/
) )
), ),
@ -99,26 +90,37 @@ module.exports = grammar({
'\'', // But is not the start of a character_literal '\'', // But is not the start of a character_literal
), ),
name_list: $ => comma_separated_list_of($.name), // Simpler definition for games than the standard grammer
name: $ => choice( // name: $ => choice(
$.direct_name, // $._direct_name,
$.explicit_dereference, // $.explicit_dereference,
$.selected_component, // $.selected_component,
$.attribute_reference, // $.attribute_reference,
$.function_call, // $.function_call,
$.character_literal, // $.character_literal,
$.qualified_expression, // $.qualified_expression,
'@', // '@',
), // ),
defining_identifier_list: $ => comma_separated_list_of($.identifier), // _direct_name: $ => choice(
direct_name: $ => choice( // $.identifier,
// $.string_literal,
// ),
_direct_name: $ => $.identifier,
name: $ => seq(
$.identifier, $.identifier,
$.string_literal, repeat(seq(
'.',
$.identifier,
)),
), ),
name_list: $ => comma_separated_list_of($.name),
defining_identifier_list: $ => comma_separated_list_of($.identifier),
explicit_dereference: $ => seq( explicit_dereference: $ => seq(
$.name, $.name,
'.', '.',
caseInsensitive('all'), reservedWord('all'),
), ),
selected_component: $ => seq( selected_component: $ => seq(
$.name, $.name,
@ -126,9 +128,9 @@ module.exports = grammar({
$.selector_name, $.selector_name,
), ),
selector_name: $ => choice( selector_name: $ => choice(
$.direct_name, $._direct_name,
$.character_literal, $.character_literal,
caseInsensitive('others'), reservedWord('others'),
), ),
attribute_reference: $ => choice( attribute_reference: $ => choice(
seq( seq(
@ -157,7 +159,7 @@ module.exports = grammar({
// value_sequence: $ => seq( // value_sequence: $ => seq(
// '[', // '[',
// optional(seq( // optional(seq(
// field('is_parallel', caseInsensitive('parallel')), // field('is_parallel', reservedWord('parallel')),
// optional(seq( // optional(seq(
// '(', // '(',
// $.chunk_specification, // $.chunk_specification,
@ -171,18 +173,18 @@ module.exports = grammar({
$.simple_expression, $.simple_expression,
seq( seq(
$.identifier, $.identifier,
caseInsensitive('in'), reservedWord('in'),
$.discrete_subtype_definition, $.discrete_subtype_definition,
), ),
), ),
iterated_element_association: $ => seq( iterated_element_association: $ => seq(
caseInsensitive('for'), reservedWord('for'),
choice( choice(
$.loop_parameter_specification, $.loop_parameter_specification,
$.iterator_specification, $.iterator_specification,
), ),
optional(seq( optional(seq(
caseInsensitive('use'), reservedWord('use'),
$.expression, $.expression,
)), )),
$.assoc_expression, $.assoc_expression,
@ -193,8 +195,8 @@ module.exports = grammar({
), ),
loop_parameter_specification: $ => seq( loop_parameter_specification: $ => seq(
$.identifier, $.identifier,
caseInsensitive('in'), reservedWord('in'),
optional(caseInsensitive('reverse')), optional(reservedWord('reverse')),
$.discrete_subtype_definition, $.discrete_subtype_definition,
optional($.iterator_filter), optional($.iterator_filter),
), ),
@ -203,7 +205,7 @@ module.exports = grammar({
$.access_definition, $.access_definition,
), ),
iterator_filter: $ => seq( iterator_filter: $ => seq(
caseInsensitive('when'), reservedWord('when'),
$.condition, $.condition,
), ),
iterator_specification: $ => seq( iterator_specification: $ => seq(
@ -213,19 +215,19 @@ module.exports = grammar({
$.loop_parameter_subtype_indication, $.loop_parameter_subtype_indication,
)), )),
choice( choice(
caseInsensitive('in'), reservedWord('in'),
caseInsensitive('of'), reservedWord('of'),
), ),
optional(caseInsensitive('reverse')), optional(reservedWord('reverse')),
$.name, $.name,
optional($.iterator_filter), optional($.iterator_filter),
), ),
attribute_designator: $ => choice( attribute_designator: $ => choice(
$.identifier, $.identifier,
caseInsensitive('access'), reservedWord('access'),
caseInsensitive('delta'), reservedWord('delta'),
caseInsensitive('digits'), reservedWord('digits'),
caseInsensitive('mod'), reservedWord('mod'),
), ),
function_call: $ => seq( function_call: $ => seq(
$.name, $.name,
@ -239,7 +241,7 @@ module.exports = grammar({
compilation_unit: $ => choice( compilation_unit: $ => choice(
$.with_clause, $.with_clause,
seq( seq(
optional(caseInsensitive('private')), optional(reservedWord('private')),
$._declarative_item, $._declarative_item,
), ),
$.statement, $.statement,
@ -276,38 +278,38 @@ module.exports = grammar({
';', ';',
), ),
package_specification: $ => seq( package_specification: $ => seq(
caseInsensitive('package'), reservedWord('package'),
field('name', $.name), // $.defining_program_unit_name), field('name', $.name),
optional($.aspect_specification), optional($.aspect_specification),
caseInsensitive('is'), reservedWord('is'),
optional($._basic_declarative_item_list), optional($._basic_declarative_item_list),
optional(seq( optional(seq(
caseInsensitive('private'), reservedWord('private'),
optional($._basic_declarative_item_list), optional($._basic_declarative_item_list),
)), )),
caseInsensitive('end'), reservedWord('end'),
field('endname', optional($.name)), field('endname', optional($.name)),
), ),
with_clause: $ => seq( with_clause: $ => seq(
field('is_limited', optional(caseInsensitive('limited'))), field('is_limited', optional(reservedWord('limited'))),
field('is_private', optional(caseInsensitive('private'))), field('is_private', optional(reservedWord('private'))),
caseInsensitive('with'), reservedWord('with'),
field('names', $.name_list), field('names', $.name_list),
';', ';',
), ),
use_clause: $ => seq( use_clause: $ => seq(
caseInsensitive('use'), reservedWord('use'),
optional(seq( optional(seq(
field('is_all', optional(caseInsensitive('all'))), field('is_all', optional(reservedWord('all'))),
field('is_type', caseInsensitive('type')), field('is_type', reservedWord('type')),
)), )),
$.name_list, $.name_list,
';', ';',
), ),
subunit: $ => seq( subunit: $ => seq( // 10.1.3
caseInsensitive('separate'), reservedWord('separate'),
'(', '(',
$.name, field('parent_unit_name', $.name),
')', ')',
$.proper_body, $.proper_body,
), ),
@ -318,17 +320,17 @@ module.exports = grammar({
// $.protected_body, // $.protected_body,
), ),
package_body: $ => seq( package_body: $ => seq(
caseInsensitive('package'), reservedWord('package'),
caseInsensitive('body'), reservedWord('body'),
$.name, $.name,
optional($.aspect_specification), optional($.aspect_specification),
caseInsensitive('is'), reservedWord('is'),
optional($.non_empty_declarative_part), optional($.non_empty_declarative_part),
optional(seq( optional(seq(
caseInsensitive('begin'), reservedWord('begin'),
$.handled_sequence_of_statements, $.handled_sequence_of_statements,
)), )),
caseInsensitive('end'), reservedWord('end'),
optional($.name), optional($.name),
';', ';',
), ),
@ -355,7 +357,7 @@ module.exports = grammar({
), ),
), ),
range_constraint: $ => seq( range_constraint: $ => seq(
caseInsensitive('range'), reservedWord('range'),
$.range_g, $.range_g,
), ),
condition: $ => seq( condition: $ => seq(
@ -378,25 +380,25 @@ module.exports = grammar({
), ),
), ),
AND_relation_list: $ => repeat1(seq( AND_relation_list: $ => repeat1(seq(
caseInsensitive('and'), reservedWord('and'),
$.relation, $.relation,
)), )),
AND_THEN_relation_list: $ => repeat1(seq( AND_THEN_relation_list: $ => repeat1(seq(
caseInsensitive('and'), reservedWord('and'),
caseInsensitive('then'), reservedWord('then'),
$.relation, $.relation,
)), )),
OR_relation_list: $ => repeat1(seq( OR_relation_list: $ => repeat1(seq(
caseInsensitive('or'), reservedWord('or'),
$.relation, $.relation,
)), )),
OR_ELSE_relation_list: $ => repeat1(seq( OR_ELSE_relation_list: $ => repeat1(seq(
caseInsensitive('or'), reservedWord('or'),
caseInsensitive('else'), reservedWord('else'),
$.relation, $.relation,
)), )),
XOR_relation_list: $ => repeat1(seq( XOR_relation_list: $ => repeat1(seq(
caseInsensitive('xor'), reservedWord('xor'),
$.relation, $.relation,
)), )),
relation: $ => choice( relation: $ => choice(
@ -409,8 +411,8 @@ module.exports = grammar({
), ),
// seq( // seq(
// $.simple_expression, // $.simple_expression,
// optional(caseInsensitive('not')), // optional(reservedWord('not')),
// caseInsensitive('in'), // reservedWord('in'),
// $.membership_choice_list, // $.membership_choice_list,
// ), // ),
// $.raise_expression, // $.raise_expression,
@ -439,37 +441,37 @@ module.exports = grammar({
)), )),
), ),
seq( seq(
caseInsensitive('abs'), reservedWord('abs'),
$.primary, $.primary,
), ),
seq( seq(
caseInsensitive('not'), reservedWord('not'),
$.primary, $.primary,
), ),
), ),
primary: $ => choice( primary: $ => choice(
$.numeric_literal, $.numeric_literal,
caseInsensitive('null'), reservedWord('null'),
$.aggregate, $.aggregate,
$.name, $.name,
// $.allocator, // $.allocator,
), ),
access_definition: $ => seq( access_definition: $ => seq(
optional($.null_exclusion), optional($.null_exclusion),
caseInsensitive('access'), reservedWord('access'),
choice( choice(
seq( seq(
optional(caseInsensitive('constant')), optional(reservedWord('constant')),
$.name, $.name,
), ),
seq( seq(
optional(caseInsensitive('protected')), optional(reservedWord('protected')),
caseInsensitive('procedure'), reservedWord('procedure'),
optional($.non_empty_parameter_profile), optional($.non_empty_parameter_profile),
), ),
seq( seq(
optional(caseInsensitive('protected')), optional(reservedWord('protected')),
caseInsensitive('function'), reservedWord('function'),
$.parameter_and_result_profile, $.parameter_and_result_profile,
), ),
), ),
@ -523,13 +525,13 @@ module.exports = grammar({
record_component_association_list: $ => choice( record_component_association_list: $ => choice(
// comma_separated_list_of($.record_component_association), // comma_separated_list_of($.record_component_association),
seq( seq(
caseInsensitive('null'), reservedWord('null'),
caseInsensitive('record'), reservedWord('record'),
), ),
), ),
null_exclusion: $ => seq( null_exclusion: $ => seq(
caseInsensitive('not'), reservedWord('not'),
caseInsensitive('null'), reservedWord('null'),
), ),
index_constraint: $ => seq( index_constraint: $ => seq(
'(', '(',
@ -537,12 +539,12 @@ module.exports = grammar({
')', ')',
), ),
digits_constraint: $ => seq( digits_constraint: $ => seq(
caseInsensitive('digits'), reservedWord('digits'),
$.simple_expression, $.simple_expression,
optional($.range_constraint), optional($.range_constraint),
), ),
delta_constraint: $ => seq( delta_constraint: $ => seq(
caseInsensitive('delta'), reservedWord('delta'),
$.simple_expression, $.simple_expression,
optional($.range_constraint), optional($.range_constraint),
), ),
@ -561,10 +563,10 @@ module.exports = grammar({
), ),
full_type_declaration: $ => choice( full_type_declaration: $ => choice(
seq( seq(
caseInsensitive('type'), reservedWord('type'),
$.identifier, $.identifier,
// optional($.known_discriminant_part), // optional($.known_discriminant_part),
caseInsensitive('is'), reservedWord('is'),
$.type_definition, $.type_definition,
// optional($.aspect_specification), // optional($.aspect_specification),
';', ';',
@ -587,39 +589,39 @@ module.exports = grammar({
// $.modular_type_definition, // $.modular_type_definition,
), ),
signed_integer_type_definition: $ => seq( signed_integer_type_definition: $ => seq(
caseInsensitive('range'), reservedWord('range'),
$.simple_expression, $.simple_expression,
'..', '..',
$.simple_expression, $.simple_expression,
), ),
derived_type_definition: $ => seq( derived_type_definition: $ => seq(
optional(caseInsensitive('abstract')), optional(reservedWord('abstract')),
optional(caseInsensitive('limited')), optional(reservedWord('limited')),
caseInsensitive('new'), reservedWord('new'),
$.subtype_indication, $.subtype_indication,
optional(seq( optional(seq(
// optional(seq( // optional(seq(
// caseInsensitive('and'), // reservedWord('and'),
// $.interface_list, // $.interface_list,
// )), // )),
$.record_extension_part, $.record_extension_part,
)), )),
), ),
record_extension_part: $ => seq( record_extension_part: $ => seq(
caseInsensitive('with'), reservedWord('with'),
$.record_definition, $.record_definition,
), ),
record_definition: $ => choice( record_definition: $ => choice(
seq( seq(
caseInsensitive('record'), reservedWord('record'),
$.component_list, $.component_list,
caseInsensitive('end'), reservedWord('end'),
caseInsensitive('record'), reservedWord('record'),
optional($.identifier), optional($.identifier),
), ),
seq( seq(
caseInsensitive('null'), reservedWord('null'),
caseInsensitive('record'), reservedWord('record'),
), ),
), ),
component_list: $ => choice( component_list: $ => choice(
@ -628,7 +630,7 @@ module.exports = grammar({
// optional($.component_item), // optional($.component_item),
// $.variant_part, // $.variant_part,
// ), // ),
caseInsensitive('null'), reservedWord('null'),
), ),
component_item: $ => seq( component_item: $ => seq(
$.component_declaration, $.component_declaration,
@ -643,7 +645,7 @@ module.exports = grammar({
';' ';'
), ),
component_definition: $ => seq( component_definition: $ => seq(
optional(caseInsensitive('aliased')), optional(reservedWord('aliased')),
choice( choice(
$.subtype_indication, $.subtype_indication,
// $.access_definition, // $.access_definition,
@ -654,8 +656,8 @@ module.exports = grammar({
abstract_subprogram_declaration: $ => seq( abstract_subprogram_declaration: $ => seq(
optional($.overriding_indicator), optional($.overriding_indicator),
$.subprogram_specification, $.subprogram_specification,
caseInsensitive('is'), reservedWord('is'),
caseInsensitive('abstract'), reservedWord('abstract'),
$.aspect_specification, $.aspect_specification,
';', ';',
), ),
@ -690,23 +692,24 @@ module.exports = grammar({
), ),
aspect_mark_list: $ => comma_separated_list_of($.aspect_association), aspect_mark_list: $ => comma_separated_list_of($.aspect_association),
aspect_specification: $ => seq( aspect_specification: $ => seq(
caseInsensitive('with'), reservedWord('with'),
$.aspect_mark_list, $.aspect_mark_list,
), ),
at_clause: $ => seq( at_clause: $ => seq(
caseInsensitive('for'), reservedWord('for'),
$.direct_name, $.identifier,
caseInsensitive('use'), // $._direct_name,
caseInsensitive('at'), reservedWord('use'),
reservedWord('at'),
$.expression, $.expression,
';', ';',
), ),
attribute_definition_clause: $ => seq( attribute_definition_clause: $ => seq(
caseInsensitive('for'), reservedWord('for'),
$.name, $.name,
$.tick, $.tick,
$.attribute_designator, $.attribute_designator,
caseInsensitive('use'), reservedWord('use'),
$.expression, $.expression,
';', ';',
), ),
@ -719,9 +722,9 @@ module.exports = grammar({
choice_parameter_specification: $ => $.identifier, // ??? inline choice_parameter_specification: $ => $.identifier, // ??? inline
component_clause: $ => seq( component_clause: $ => seq(
$.name, $.name,
caseInsensitive('at'), reservedWord('at'),
field('position', $.expression), field('position', $.expression),
caseInsensitive('range'), reservedWord('range'),
field('first_bit', $.simple_expression), field('first_bit', $.simple_expression),
'..', '..',
field('last_bit', $.simple_expression), field('last_bit', $.simple_expression),
@ -736,7 +739,7 @@ module.exports = grammar({
), ),
entry_declaration: $ => seq( entry_declaration: $ => seq(
optional($.overriding_indicator), optional($.overriding_indicator),
caseInsensitive('entry'), reservedWord('entry'),
$.identifier, $.identifier,
optional(seq( optional(seq(
'(', '(',
@ -749,26 +752,26 @@ module.exports = grammar({
), ),
enumeration_aggregate: $ => $.array_aggregate, // ??? inline enumeration_aggregate: $ => $.array_aggregate, // ??? inline
enumeration_representation_clause: $ => seq( enumeration_representation_clause: $ => seq(
caseInsensitive('for'), reservedWord('for'),
$.name, $.name,
caseInsensitive('use'), reservedWord('use'),
$.enumeration_aggregate, $.enumeration_aggregate,
';', ';',
), ),
exception_choice_list: $ => list_of('|', $.exception_choice), exception_choice_list: $ => list_of('|', $.exception_choice),
exception_choice: $ => choice( exception_choice: $ => choice(
$.name, $.name,
caseInsensitive('others'), reservedWord('others'),
), ),
exception_declaration: $ => seq( exception_declaration: $ => seq(
$.defining_identifier_list, $.defining_identifier_list,
':', ':',
caseInsensitive('exception'), reservedWord('exception'),
optional($.aspect_specification), optional($.aspect_specification),
';', ';',
), ),
exception_handler: $ => seq( exception_handler: $ => seq(
caseInsensitive('when'), reservedWord('when'),
optional(seq( optional(seq(
$.choice_parameter_specification, $.choice_parameter_specification,
':', ':',
@ -784,7 +787,7 @@ module.exports = grammar({
expression_function_declaration: $ => seq( expression_function_declaration: $ => seq(
optional($.overriding_indicator), optional($.overriding_indicator),
$.function_specification, $.function_specification,
caseInsensitive('is'), reservedWord('is'),
'(', '(',
$.expression, $.expression,
')', ')',
@ -797,7 +800,7 @@ module.exports = grammar({
')', ')',
), ),
function_specification: $ => seq( function_specification: $ => seq(
caseInsensitive('function'), reservedWord('function'),
$.name, $.name,
$.parameter_and_result_profile, $.parameter_and_result_profile,
), ),
@ -806,7 +809,7 @@ module.exports = grammar({
$.generic_package_declaration, $.generic_package_declaration,
), ),
generic_formal_part: $ => seq( generic_formal_part: $ => seq(
caseInsensitive('generic'), reservedWord('generic'),
repeat($.generic_formal_parameter_declaration), repeat($.generic_formal_parameter_declaration),
), ),
generic_formal_parameter_declaration: $ => choice( generic_formal_parameter_declaration: $ => choice(
@ -830,18 +833,18 @@ module.exports = grammar({
), ),
generic_instantiation: $ => seq( generic_instantiation: $ => seq(
choice( choice(
caseInsensitive('package'), reservedWord('package'),
seq( seq(
optional($.overriding_indicator), optional($.overriding_indicator),
choice( choice(
caseInsensitive('procedure'), reservedWord('procedure'),
caseInsensitive('function'), reservedWord('function'),
), ),
), ),
), ),
$.name, $.name,
caseInsensitive('is'), reservedWord('is'),
caseInsensitive('new'), reservedWord('new'),
$.name, // includes the generic_actual_part $.name, // includes the generic_actual_part
optional($.aspect_specification), optional($.aspect_specification),
';', ';',
@ -867,7 +870,7 @@ module.exports = grammar({
), ),
global_mode: $ => choice( global_mode: $ => choice(
$.non_empty_mode, $.non_empty_mode,
caseInsensitive('overriding'), reservedWord('overriding'),
), ),
global_set: $ => prec.left( global_set: $ => prec.left(
comma_separated_list_of($.name), // ??? name_list comma_separated_list_of($.name), // ??? name_list
@ -875,44 +878,44 @@ module.exports = grammar({
handled_sequence_of_statements: $ => seq( handled_sequence_of_statements: $ => seq(
$.sequence_of_statements, $.sequence_of_statements,
optional(seq( optional(seq(
caseInsensitive('exception'), reservedWord('exception'),
$.exception_handler_list, $.exception_handler_list,
)), )),
), ),
label: $ => seq( label: $ => seq(
'<<', '<<',
field('statement_identifier', $.direct_name), field('statement_identifier', $._direct_name),
'>>', '>>',
), ),
mod_clause: $ => seq( mod_clause: $ => seq(
caseInsensitive('at'), reservedWord('at'),
caseInsensitive('mod'), reservedWord('mod'),
$.expression, $.expression,
';', ';',
), ),
non_empty_mode: $ => choice( non_empty_mode: $ => choice(
caseInsensitive('in'), reservedWord('in'),
seq( seq(
caseInsensitive('in'), reservedWord('in'),
caseInsensitive('out'), reservedWord('out'),
), ),
caseInsensitive('out'), reservedWord('out'),
), ),
null_procedure_declaration: $ => seq( null_procedure_declaration: $ => seq(
optional($.overriding_indicator), optional($.overriding_indicator),
$.procedure_specification, $.procedure_specification,
caseInsensitive('is'), reservedWord('is'),
caseInsensitive('null'), reservedWord('null'),
// optional($.aspect_specification), // optional($.aspect_specification),
), ),
null_statement: $ => seq( null_statement: $ => seq(
caseInsensitive('null'), reservedWord('null'),
';', ';',
), ),
number_declaration: $ => seq( number_declaration: $ => seq(
$.defining_identifier_list, $.defining_identifier_list,
';', ';',
caseInsensitive('constant'), reservedWord('constant'),
// $.assign_value, // $.assign_value,
';', ';',
), ),
@ -920,8 +923,8 @@ module.exports = grammar({
seq( seq(
$.defining_identifier_list, $.defining_identifier_list,
':', ':',
caseInsensitive('aliased'), reservedWord('aliased'),
caseInsensitive('constant'), reservedWord('constant'),
choice( choice(
$.subtype_indication, $.subtype_indication,
$.access_definition, $.access_definition,
@ -935,8 +938,8 @@ module.exports = grammar({
// $.single_protected_declaration, // $.single_protected_declaration,
), ),
overriding_indicator: $ => seq( overriding_indicator: $ => seq(
optional(caseInsensitive('not')), optional(reservedWord('not')),
caseInsensitive('overriding'), reservedWord('overriding'),
), ),
non_empty_parameter_profile: $ => // ??? inline non_empty_parameter_profile: $ => // ??? inline
$.formal_part, $.formal_part,
@ -947,7 +950,7 @@ module.exports = grammar({
parameter_specification: $ => seq( parameter_specification: $ => seq(
$.defining_identifier_list, $.defining_identifier_list,
':', ':',
optional(caseInsensitive('aliased')), optional(reservedWord('aliased')),
optional($.non_empty_mode), optional($.non_empty_mode),
optional($.null_exclusion), optional($.null_exclusion),
$.name, $.name,
@ -958,7 +961,7 @@ module.exports = grammar({
$.parameter_specification, $.parameter_specification,
), ),
pragma_g: $ => seq( pragma_g: $ => seq(
caseInsensitive('pragma'), reservedWord('pragma'),
$.identifier, $.identifier,
optional(seq( optional(seq(
'(', '(',
@ -971,19 +974,19 @@ module.exports = grammar({
';' ';'
), ),
procedure_specification: $ => seq( procedure_specification: $ => seq(
caseInsensitive('procedure'), reservedWord('procedure'),
$.name, $.name,
optional($.non_empty_parameter_profile), optional($.non_empty_parameter_profile),
), ),
record_representation_clause: $ => prec.left(seq( record_representation_clause: $ => prec.left(seq(
caseInsensitive('for'), reservedWord('for'),
$.name, $.name,
caseInsensitive('use'), reservedWord('use'),
caseInsensitive('record'), reservedWord('record'),
optional($.mod_clause), optional($.mod_clause),
repeat($.component_clause), repeat($.component_clause),
caseInsensitive('end'), reservedWord('end'),
caseInsensitive('record'), reservedWord('record'),
optional($.name), optional($.name),
)), )),
renaming_declaration: $ => choice( renaming_declaration: $ => choice(
@ -994,7 +997,7 @@ module.exports = grammar({
// $.generic_renaming_declaration, // $.generic_renaming_declaration,
), ),
result_profile: $ => seq( result_profile: $ => seq(
caseInsensitive('return'), reservedWord('return'),
choice( choice(
seq( seq(
optional($.null_exclusion), optional($.null_exclusion),
@ -1038,9 +1041,9 @@ module.exports = grammar({
$.function_specification, $.function_specification,
), ),
subtype_declaration: $ => seq( subtype_declaration: $ => seq(
caseInsensitive('subtype'), reservedWord('subtype'),
$.identifier, $.identifier,
caseInsensitive('is'), reservedWord('is'),
$.subtype_indication, $.subtype_indication,
optional($.aspect_specification), optional($.aspect_specification),
';', ';',