Ada-ASSURED Ada Grammar


Ada-ASSURED structures Ada code according to the following grammar.

A rule such as:

states that list phylum identifier_list has two operators, identifier_listNil and identifier_listCons, of arity 0 and 2, respectively. The arguments of operator identifier_listCons are terms of phylum identifier and phylum identifier_list.

The phyla STR, IDENTIFIER, DECIMAL_NUMBER, BASED_NUMBER, CHARACTER, CHARACTER_STRING are character strings that are synonyms for STR. The phylum CHAR represents a single character.

The grammar of Ada95 differs slightly from that of Ada83. These differences are delimited in the grammar by the following construct:

#if ADA95
  Ada95 specific rules
#else
  Ada83 specific rules
#endif ADA95
Some phyla have the string "~p" following the phylum name. This indicates that the marked phylum cannot be parsed using sg:parse.

The root symbol of the grammar is compilation.

The grammar is presented in the following ways:


Shortcuts


Alphabetical Index

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Grammar arranged by LRM section


Section 2. Lexical Elements

/* 2.3 ----------------------------------------------------------- */ list identifier_list;
identifier_list: identifier_listNil () | identifier_listCons (identifier identifier_list) ; identifier: identifierNil() | identifierLeaf (IDENTIFIER right_comment_line) | identifier_Comment (left_comment_line) | identifier_Blank () | identifierDollar (STR right_comment_line) ; identifier2: identifier2Nil () | identifier2Leaf (IDENTIFIER) | identifier2Dollar (STR) ; optional optional_simple_name; optional_simple_name: optional_simple_nameNil () | optional_simple_namePH () | optional_simple_nameOption (identifier) ; /* 2.4 ------------------------------------------------------------ */ number: NumberPH () | NumberDecimal (DECIMAL_NUMBER) | NumberBased (BASED_NUMBER) ; /* 2.5 ------------------------------------------------------------ */ character: characterNil () | characterLeaf (CHARACTER) ; character2: character2Nil () | character2Leaf (CHARACTER) ; /* 2.6 ------------------------------------------------------------ */ character_string: character_stringNil () | character_stringLeaf (CHARACTER_STRING) ; /* 2.7 ------------------------------------------------------------ */ optional list optional_left_comment_line_list; optional_left_comment_line_list: optional_left_comment_line_listNil () | optional_left_comment_line_listCons (left_comment_item optional_left_comment_line_list) ; left_comment_item: ~p LeftCommentItemPH () | LeftCommentItem (left_comment_line) | LeftCommentBlank (STR) ; preprocessor_text: PreprocessorTextPH () | PreprocessorText (STR) ; preprocessor_line: PreprocessorLine (preprocessor_text) ; freeform_text: ~p FreeformText (freeform_textlines) ; list freeform_textlines; freeform_textlines: ~p freeform_textlinesNil () | freeform_textlinesCons (STR freeform_textlines) ; comment_text: CommentTextPH () | CommentText (STR STR) ; left_comment_line: ~p LeftCommentLine (comment_text) | LeftBlankComment () | LeftCommentLineCol1 (STR) ; optional right_comment_line; right_comment_line: ~p RightCommentLineNil () | RightCommentLine (comment_text) ; /* 2.8 ------------------------------------------------------------ */ /* Abstract syntax for Pragmas ------------------------------------ */ list association_list; association_list: association_listNil () | association_listCons (association association_list) ; association: AssociationPH () | PositionalAssociation (expression right_comment_line) | NamedAssociation (name expression right_comment_line) | association_Comment (left_comment_line) | association_Blank (STR) | AssociationPreprocessor (preprocessor_line) | AssociationFreeform (freeform_text association_list) ; pragma_clause: ~p Pragma (identifier association_list right_comment_line) ; optional list pragma_choice_list; pragma_choice_list: pragma_choice_listNil () | pragma_choice_listCons (pragma_choice pragma_choice_list) ; pragma_choice: pragma_choice_PH () | PragmaChoicePragma (pragma_clause) | pragma_choice_Comment (left_comment_line) | pragma_choice_Blank (STR) | PragmaPreprocessor (preprocessor_line) | PragmaFreeform (freeform_text pragma_choice_list) ;

Section 3. Declarations and Types

/* 3.1 ------------------------------------------------------------ */ optional optional_initialization;
optional_initialization: optional_initializationOptionNil () | optional_initializationOption (expression) ; /* 3.2 ------------------------------------------------------------ */ object_declaration: ObjectDeclarationPH () | Declaration (identifier_list optional_storage_class subtype_indication optional_initialization) | ArrayDeclaration (identifier_list optional_storage_class array_type_definition optional_initialization) | NumberDeclaration (identifier_list expression) #if ADA95 | TaskDeclaration (single_task_declaration) | ProtectedDeclaration (single_protected_declaration) #endif ADA95 ; optional optional_storage_class; optional_storage_class: OptionalStorageClassNil () | OptionalStorageClass (storage_class) ; storage_class: ~p StorageClassPH () | StorageClassConstant () #if ADA95 | StorageClassAliased () | StorageClassAliasedConstant () #endif ADA95 ; /* 3.3.1 ---------------------------------------------------------- */ type_declaration: TypeDeclarationPH () | FullTypeDeclaration (full_type_declaration) | IncompleteTypeDeclaration (incomplete_type_declaration) | PrivateTypeDeclaration (private_type_declaration) | SubtypeDeclaration (identifier subtype_indication) #if ADA95 | PrivateExtensionDeclaration (private_extension_declaration) #endif ADA95 ; full_type_declaration: FullTypeDiscriminant (identifier optional_discriminant_part type_definition) #if ADA95 | TaskTypeDeclaration (identifier optional_discriminant_part optional_is_entry) | ProtectedTypeDeclaration (identifier optional_discriminant_part protected_definition) #endif ADA95 ; type_definition: TypeDefinitionPH () | EnumerationTypeDefinition (enumeration_literal_specification_list) #if ADA95 | IntegerTypeDefinition (integer_type_definition) #else | IntegerTypeDefinition (range_constraint) #endif ADA95 | RealTypeDefinition (real_type_definition) | ArrayTypeDefinition (array_type_definition) #if ADA95 | RecordTypeDefinition (optional_left_comment_line_list optional_tagged optional_limited record_definition) #else | RecordTypeDefinition (optional_left_comment_line_list right_comment_line component_list) #endif ADA95 | AccessTypeDefinition (access_type_definition) #if ADA95 | DerivedTypeDefinition (optional_abstract subtype_indication optional_record_extension_part) #else | DerivedTypeDefinition (subtype_indication) #endif ADA95 ; /* 3.3.2 ---------------------------------------------------------- */ optional optional_name; optional_name: ~p optional_nameOptionNil () | optional_nameOption (name) ; list expanded_name; expanded_name: expanded_nameNil () | expanded_nameCons (identifier expanded_name) ; expanded_name2: ExpandedName2PH () | ExpandedName2 (expanded_name) ; optional optional_expanded_name; optional_expanded_name: optional_expanded_nameOptionNil () | optional_expanded_nameOption (expanded_name) ; list expanded_name_list; expanded_name_list: expanded_name_listNil () | expanded_name_listCons (expanded_name2 expanded_name_list) ; list component_list; component_list: component_listNil () | component_listCons (component component_list) ; optional optional_constraint; optional_constraint: ConstraintNil () | ConstraintPH () | ConstraintRangeConstraint (range_constraint) | ConstraintFloatingPointConstraint (floating_point_constraint) | ConstraintFixedPointConstraint (fixed_point_constraint) | ConstraintAbsorbedConstraint (aggregate) ; subtype_indication: SubtypeIndication (type_mark optional_constraint) ; type_mark: TypeMark (name) ; type_mark2: TypeMark2 (name) ; /* 3.5 ------------------------------------------------------------ */ optional optional_range_constraint; optional_range_constraint: optional_range_constraintOptionNil () | optional_range_constraintOption (range_constraint) ; range_constraint: RangeConstraint (range) ; range: RangePH () | RangeAttribute (expression) | Range (expression expression) ; /* 3.5.1 ---------------------------------------------------------- */ list enumeration_literal_specification_list; enumeration_literal_specification_list: enumeration_literal_specification_listNil() | enumeration_literal_specification_listCons (enumeration_literal_specification enumeration_literal_specification_list) ; enumeration_literal_specification: EnumerationLiteralSpecificationPH () | EnumerationLiteralSpecificationIdentifier (identifier2 right_comment_line) | EnumerationLiteralSpecificationCharacter (character2 right_comment_line) | enumeration_literal_specification_Comment (left_comment_line) | enumeration_literal_specification_Blank (STR) | EnumerationLiteralSpecificationPreprocessor (preprocessor_line) ; /* 3.5.6 ---------------------------------------------------------- */ real_type_definition: RealTypeDefinitionPH () | RealTypeDefinitionFloatingConstraint (floating_point_constraint) | RealTypeDefinitionFixedConstraint (fixed_point_constraint) ; /* 3.5.7 ---------------------------------------------------------- */ floating_point_constraint: FloatingPointConstraint (expression optional_range_constraint) ; /* 3.5.8 ---------------------------------------------------------- */ #if ADA95 fixed_point_constraint: OrdinaryFixedPointConstraint (expression optional_range_constraint) | DecimalFixedPointConstraint (expression expression optional_range_constraint) #else fixed_point_constraint: ~p FixedPointConstraint (expression optional_range_constraint) #endif ADA95 ; /* 3.6 ------------------------------------------------------------ */ list discrete_range_list; discrete_range_list: discrete_range_listNil () | discrete_range_listCons (discrete_range discrete_range_list) ; constrained_array_definition: ConstrainedArrayDefinition (index_constraint #if ADA95 optional_aliased #endif ADA95 subtype_indication) ; list index_subtype_definition_list; index_subtype_definition_list: ~p index_subtype_definition_listNil () | index_subtype_definition_listCons (index_subtype_definition index_subtype_definition_list) ; unconstrained_array_definition: UnconstrainedArrayDefinition (index_subtype_definition_list #if ADA95 optional_aliased #endif ADA95 subtype_indication) ; index_subtype_definition: IndexSubtypeDefinition (type_mark) ; index_constraint: IndexConstraint (discrete_range_list) ; discrete_range: DiscreteRangePH () | DiscreteRangeRange (range) | DiscreteRangeSubtype (type_mark2 optional_range_constraint) ; discrete_range2: DiscreteRange2PH () | DiscreteRange2DiscreteRange (discrete_range) ; /* 3.7 ------------------------------------------------------------ */ component: ComponentPH () | Component (component_declaration right_comment_line) | ComponentVariant (variant_part) | ComponentPragma (pragma_clause) | ComponentNull () | ComponentComment (left_comment_line) | ComponentBlank (STR) | ComponentPreprocessor (preprocessor_line) | ComponentFreeform (freeform_text component_list) #if ADA95 | ComponentRepresentation (representation_clause) #endif ADA95 ; component_declaration: ComponentDeclaration (identifier_list #if ADA95 optional_aliased #endif ADA95 subtype_indication optional_initialization) ; /* 3.7.1 ---------------------------------------------------------- */ optional optional_discriminant_part; optional_discriminant_part: optional_discriminant_partOptionNil () | optional_discriminant_partOption (discriminant_part) ; discriminant_part: DiscriminantPart (discriminant_specification_list) #if ADA95 | UnknownDiscriminantPart () #endif ADA95 ; list discriminant_specification_list; discriminant_specification_list: discriminant_specification_listNil () | discriminant_specification_listCons (discriminant_specification discriminant_specification_list) ; discriminant_specification: DiscriminantSpecification (identifier_list type_mark optional_initialization) #if ADA95 | DiscriminantSpecificationAccess (identifier_list subtype_indication optional_initialization) #endif ADA95 ; /* 3.7.3 ---------------------------------------------------------- */ list variant_list; variant_list: variant_listNil() | variant_listCons (variant variant_list) ; variant_part: VariantPart (identifier pragma_choice_list variant_list right_comment_line) ; variant: Variant (choice_list right_comment_line component_list) ; list choice_list; choice_list: choice_listNil () | choice_listCons (choice choice_list) ; choice: ChoicePH () | ChoiceExpression (expression) | ChoiceDiscreteRange (discrete_range2) | ChoiceOthers () ; /* 3.8 ------------------------------------------------------------ */ #if ADA95 access_type_definition: ~p AccessDefinition (optional_general_access_modifier subtype_indication) | AccessProcedure (optional_protected optional_formal_part) | AccessFunction (optional_protected optional_formal_part subtype_indication) ; #else access_type_definition: AccessDefinition (subtype_indication) ; #endif ADA95 /* 3.8.1 ---------------------------------------------------------- */ incomplete_type_declaration: IncompleteType (identifier optional_discriminant_part) ; /* 3.9 ------------------------------------------------------------ */ optional list basic_declaration_list; basic_declaration_list: basic_declaration_listNil () | basic_declaration_listCons (declaration basic_declaration_list) ; optional list declaration_list; declaration_list: declaration_listNil () | declaration_listCons (declaration_choice declaration_list) ; declaration: DeclarationPH () | BasicDeclarativeItemUse (use_clause) | BasicDeclarativeItemRep (representation_clause right_comment_line) | BasicDeclarativeItemPragma (pragma_clause) | BasicDeclarativeItemComment (left_comment_line) | BasicDeclarativeItemBlank (STR) | ObjectBasicDeclaration (object_declaration right_comment_line) | TypeDeclaration (type_declaration right_comment_line) | ExceptionDeclaration (identifier_list right_comment_line) | RenamingDeclaration (renaming_declaration right_comment_line) | ProgramUnitBasicDeclaration (program_unit_declaration) #if ADA95 #else | TaskBasicDeclaration (task_declaration) #endif ADA95 | BasicDeclarativeItemPreprocessor (preprocessor_line) | BasicDeclarativeItemFreeform (freeform_text declaration_list) #if ADA95 | AbstractSubprogramDeclaration (subprogram_specification) #endif ADA95 ; declaration_choice: DeclarationChoicePH () | ChoiceDeclaration (declaration) | ChoiceBody (proper_body) | ChoiceStub (body_stub) ; proper_body: ProperBodyPH () | ProperBodySubprogramBody (subprogram_body) | ProperBodyPackageBody (package_body) | ProperBodyTaskBody (task_body) #if ADA95 | ProperBodyProtectedBody (protected_body) #endif ADA95 ; array_type_definition: ~p Constrained (constrained_array_definition) | Unconstrained (unconstrained_array_definition) ; #if ADA95 optional optional_abstract; optional_abstract: OptionalAbstractNil () | OptionalAbstractPH () | OptionalAbstract () ; optional optional_record_extension_part; optional_record_extension_part: OptionalRecordExtensionPartNil () | OptionalRecordExtensionPart (record_definition) ; record_definition: ~p RecordDefinition (right_comment_line component_list) | RecordDefinitionNull () ; optional optional_tagged; optional_tagged: OptionalTaggedNil () | OptionalTaggedPH () | OptionalTagged (optional_abstract) ; integer_type_definition: ~p SignedIntegerTypeDefinition (range_constraint) | ModularTypeDefinition (expression) ; optional optional_general_access_modifier; optional_general_access_modifier: OptionalGeneralAccessModifierNil () | OptionalGeneralAccessModifierPH () | OptionalGeneralAccessModifierAll () | OptionalGeneralAccessModifierConstant() ; optional optional_aliased; optional_aliased: OptionalAliasedNil () | OptionalAliasedPH () | OptionalAliased () ; optional optional_protected; optional_protected: OptionalProtectedNil () | OptionalProtectedPH () | OptionalProtected () ; #endif ADA95

Section 4. Names and Expressions

/* 4.1 ------------------------------------------------------------ */
operator_symbol: operator_symbolNil () | operator_symbolLeaf (CHARACTER_STRING) ; list component_association_list; component_association_list: component_association_listNil () | component_association_listCons (component_association component_association_list) ; component_association: ComponentAssociationPH () | CompAssociationPositional (expression right_comment_line) | CompAssociationNamed (choice_list expression right_comment_line) | CompAssociationDiscRange (discrete_range2 right_comment_line) /* component_association has been expanded to absorb index_constraints, discriminant_constraints, and slices. */ | component_association_Comment (left_comment_line) | component_association_Blank (STR) | CompAssociationPreprocessor (preprocessor_line) | CompAssociationFreeform (freeform_text component_association_list) ; list component_association_list; operator_symbol2: operator_symbol2Nil () | operator_symbol2Leaf (CHARACTER_STRING) ; list name_list; name_list: name_listNil () | name_listCons (name2 name_list) ; /* The following phylum is needed to avoid double resting places for placeholders on the name_list */ name2: Name2PH () | Name2 (name) ; name: NamePH () | NameSimpleName (name_start) | Name (name_start name_part_list) ; name_start: NameStartPH () | NameIdentifier (identifier2) | NameCharacterLiteral (character2) | NameOperatorSymbol (operator_symbol2) ; list name_part_list; name_part_list: ~p name_part_listNil () | name_part_listCons (name_part name_part_list) ; name_part: ~p NamePartPH () | NameIndexedComponent (aggregate) | NameSelectedComponent (selector) | NameAttribute (attribute_designator) | QualifiedExpression (aggregate) /* NameSlice has been absorbed by indexed component */ ; /* 4.1.3 ---------------------------------------------------------- */ selector: SelectorPH () | SelectorSimpleName (identifier2) | SelectorCharacterLiteral (character2) | SelectorOperatorSymbol (operator_symbol2) | SelectorAll () ; /* 4.1.4 ---------------------------------------------------------- */ attribute_designator: AttributeDesignatorPH () | AttributeDesignatorId (identifier) | AttributeDesignatorDigits (STR) | AttributeDesignatorDelta (STR) | AttributeDesignatorRange (STR) #if ADA95 | AttributeDesignatorAccess (STR) #endif ADA95 ; /* 4.3 ------------------------------------------------------------ */ aggregate: Aggregate (component_association_list) #if ADA95 | AggregateNull () | ExtensionAggregateNull (expression) | ExtensionAggregate (expression component_association_list) #endif ADA95 ; /* 4.4 ------------------------------------------------------------ */ list expression_list; expression_list: ~p expression_listNil () | expression_listCons (expression expression_list) ; optional optional_expression; optional_expression: optional_expressionOptionNil () | optional_expressionOption (expression) ; expression: ExpressionPH () | ExpressionBinaryPH (expression expression) | And (expression expression) | AndThen (expression expression) | Or (expression expression) | OrElse (expression expression) | Xor (expression expression) | Equal (expression expression) | NotEqual (expression expression) | Less (expression expression) | LessEqual (expression expression) | Greater (expression expression) | GreaterEqual (expression expression) | InRange (expression range) | NotInRange (expression range) | Sum (expression expression) | Difference (expression expression) | Catenate (expression expression) | UPlus (expression) | UMinus (expression) | Product (expression expression) | Quotient (expression expression) | Mod (expression expression) | Rem (expression expression) | Power (expression expression) | Abs (expression) | Not (expression) | ExpressionNumber (number) | ExpressionCharacterString (character_string) | ExpressionNull () | ExpressionAggregate (aggregate) | ExpressionName (name) | ExpressionAllocator (allocator) | ExpressionParenthesized (expression) ; /* 4.6 ------------------------------------------------------------ */ /* 4.7 ------------------------------------------------------------ */ /* qualified_expression is covered under expression */ /* 4.8 ------------------------------------------------------------ */ allocator: AllocatorPH () | AllocatorSubtype (subtype_indication) | AllocatorQualifiedExpression (name) ;

Section 5. Statements

/* 5.1, 5.2, 5.3, 5.9, 9.6, 9.10, 11.3 ---------------------------- */ list statement_list;
statement_list: statement_listNil () | statement_listCons (statement_choice statement_list) ; optional list optional_statement_list; optional_statement_list: optional_statement_listNil () | optional_statement_listCons (statement_choice optional_statement_list) ; optional optional_do_end; optional_do_end: optional_do_endOptionNil () | optional_do_endOption (statement_list) ; optional list optional_label_list; optional_label_list: optional_label_listNil () | optional_label_listCons (label optional_label_list) ; optional optional_exit_when_condition; optional_exit_when_condition: ~p optional_exit_when_conditionOptionNil() | optional_exit_when_conditionOption (expression) ; optional optional_declare_part; optional_declare_part: optional_declare_partOptionNil () | optional_declare_partOption (right_comment_line declaration_list) ; statement_choice: StatementChoicePH() | Statement (optional_label_list statement right_comment_line) | StatementPragma (pragma_clause) | CommentStatement (left_comment_line) | StatementBlank (STR) | CommentedOutStatement (CHAR statement_list right_comment_line STR) | CommentedOutStatementText (CHAR STR) | StatementPreprocessor (preprocessor_line) | StatementFreeform (freeform_text statement_list) ; co_statement_list: CoStatementListNil () | CoStatementList (statement_list STR STR right_comment_line) ; label: Label (identifier right_comment_line) ; statement: StatementNull () | StatementAssignment (name expression) | StatementCall (name) | StatementExit (optional_expanded_name optional_exit_when_condition) | StatementReturn (optional_expression) | StatementGoto (expanded_name) | StatementDelay (delay_statement) | StatementAbort (name_list) | StatementRaise (optional_name) | StatementCode (name) | StatementIf (expression right_comment_line right_comment_line statement_list elseif_list optional_else) | StatementCase (expression pragma_choice_list case_statement_alternative_list) | StatementLoop (optional_simple_name optional_iteration_scheme statement_list) | StatementBlock (optional_simple_name optional_declare_part begin_end) | StatementAccept (accept_statement) | StatementSelectWait (selective_wait) | StatementCondEntryCall (conditional_entry_call) | StatementTimedEntryCall (timed_entry_call) #if ADA95 | StatementAsynchronousSelect (asynchronous_select) | StatementRequeue (name optional_with_abort) #endif ADA95 ; optional optional_else; optional_else: ElseNil () | ElseOption (right_comment_line statement_list) ; /* 5.3, continued ------------------------------------------------- */ optional list elseif_list; elseif_list: elseif_listNil() | elseif_listCons (elseif elseif_list) ; elseif: Elseif (expression right_comment_line statement_list) ; /* 5.4, continued ------------------------------------------------- */ list case_statement_alternative_list; case_statement_alternative_list: case_statement_alternative_listNil () | case_statement_alternative_listCons (case_statement_alternative case_statement_alternative_list) ; case_statement_alternative: CaseStatementAlternative (choice_list right_comment_line statement_list) ; /* 5.5, continued ------------------------------------------------- */ optional optional_iteration_scheme; optional_iteration_scheme: IterationSchemeNil () | IterationSchemePH () | IterationSchemeFor (identifier optional_reverse discrete_range) | IterationSchemeWhile (expression) ; optional optional_reverse; optional_reverse: OptionalReverseNil () | OptionalReversePH () | OptionalReverse () ;

Section 6. Subprograms

/* 6.1 ------------------------------------------------------------ */ optional optional_formal_part;
optional_formal_part: optional_formal_partOptionNil () | optional_formal_partOption (parameter_specification_list) ; subprogram_declaration: SubprogramDeclaration (subprogram_specification) ; #if ADA95 subprogram_specification: SubprogramSpecificationProcedure (expanded_name optional_formal_part) #else subprogram_specification: ~p SubprogramSpecificationProcedure (identifier optional_formal_part) #endif ADA95 | SubprogramSpecificationFunction (designator optional_formal_part type_mark) ; designator: DesignatorPH() #if ADA95 | DesignatorIdentifier (expanded_name) #else | DesignatorIdentifier (identifier) #endif ADA95 | DesignatorOperatorSymbol (operator_symbol) ; list expanded_designator; expanded_designator: expanded_designatorNil () | expanded_designatorCons (designator expanded_designator) ; list parameter_specification_list; parameter_specification_list: parameter_specification_listNil () | parameter_specification_listCons (parameter_specification parameter_specification_list) ; parameter_specification: ParameterSpecification (identifier_list mode type_mark optional_initialization right_comment_line) | parameter_specification_Comment (left_comment_line) | parameter_specification_Blank (STR) | ParameterSpecificationPreprocessor (preprocessor_line) | ParameterSpecificationFreeform (freeform_text parameter_specification_list) ; mode: ModePH () | ModeInDefault () | ModeIn () | ModeOut () | ModeInOut () #if ADA95 | ModeAccess () #endif ADA95 ; /* 6.3 ------------------------------------------------------------ */ list exception_handler_list; exception_handler_list: exception_handler_listNil () | exception_handler_listCons (exception_handler exception_handler_list) ; optional optional_exception_part; optional_exception_part: optional_exception_partOptionNil () | optional_exception_partOption (pragma_choice_list exception_handler_list) ; subprogram_body: SubprogramBody (subprogram_specification optional_left_comment_line_list declaration_list begin_end) ; begin_end: BeginEnd (statement_list optional_exception_part) ; /* 6.4 ------------------------------------------------------------ */ /* All subprogram calls are absorbed by "name" -------------------- */

Section 7. Packages

/* 7.1 ------------------------------------------------------------ */
package_declaration: PackageDeclaration (package_specification) ; #if ADA95 package_specification: PackageSpec (expanded_name optional_left_comment_line_list basic_declaration_list optional_private_part) ; #else package_specification: PackageSpec (identifier optional_left_comment_line_list basic_declaration_list optional_private_part) ; #endif ADA95 optional optional_private_part ; optional_private_part: optional_private_partOptionNil () | optional_private_partOption (basic_declaration_list) ; optional optional_begin_no_end; optional_begin_no_end: optional_begin_no_endOptionNil () | optional_begin_no_endOption (begin_no_end) ; package_body: PackageBody ( #if ADA95 expanded_name #else identifier #endif ADA95 optional_left_comment_line_list declaration_list optional_begin_no_end) ; begin_no_end: Begin_No_End (statement_list optional_exception_part) ; /* 7.4 ------------------------------------------------------------ */ private_type_declaration: PrivateTypeDecl (identifier optional_discriminant_part #if ADA95 optional_tagged #endif ADA95 optional_limited) ; optional optional_limited; optional_limited: optional_limitedNil () | optional_limitedPH () | optional_limitedOption () ; #if ADA95 private_extension_declaration: PrivateTypeExtension (identifier optional_discriminant_part optional_abstract subtype_indication) ; #endif ADA95

Section 8. Visibility Rules

/* 8.4 ------------------------------------------------------------ */
use_clause: UseClause (expanded_name_list right_comment_line) #if ADA95 | UseTypeClause (expanded_name_list right_comment_line) #endif ADA95 ; /* 8.5 ------------------------------------------------------------ */ renaming_declaration: RenamingDeclarationPH () | RenamingDeclarationObject (identifier type_mark name) | RenamingDeclarationException (identifier name) #if ADA95 | RenamingDeclarationPackage (expanded_name expanded_name) | RenamingDeclarationGeneric (generic_renaming_declaration) #else | RenamingDeclarationPackage (identifier expanded_name) #endif ADA95 | RenamingDeclarationSubprogram (subprogram_specification name) ; #if ADA95 generic_renaming_declaration: ~p GenericRenamingPackage (expanded_name name) | GenericRenamingProcedure (expanded_name name) | GenericRenamingFunction (expanded_name name) ; #endif ADA95

Section 9. Tasks

/* 9.1 ------------------------------------------------------------ */ #if ADA95 #else
task_declaration: TaskDeclaration (task_specification) ; task_specification: TaskSpecification (optional_type identifier optional_is_entry) ; #endif ADA95 optional optional_type; optional_type: OptionalTypeNil () | OptionalTypePH () | OptionalType () ; optional_is_entry: OptionalIsEntryNil () | OptionalIsEntry (is_entry_list) ; optional list is_entry_list; is_entry_list: is_entry_listNil () | is_entry_listCons (entry_items is_entry_list) ; task_body: TaskBody (identifier declaration_list begin_no_end) ; /* 9.5 ------------------------------------------------------------ */ optional optional_when_condition; optional_when_condition: ~p optional_when_conditionOptionNil () | optional_when_conditionOption (pragma_choice_list expression) ; entry_items: EntryChoicePH () | EntryChoiceDeclaration (entry_declaration) | EntryChoiceRepClause (representation_clause) | EntryChoicePragma (pragma_clause) | EntryChoiceComment (left_comment_line) | EntryChoiceBlank (STR) | EntryChoicePreprocessor (preprocessor_line) | EntryChoiceFreeform (freeform_text is_entry_list) #if ADA95 | EntryChoiceSubprogram (subprogram_declaration) | EntryChoiceComponent (component_declaration) #endif ADA95 ; entry_declaration: EntryDeclaration (identifier optional_formal_part) | EntryDeclarationRange (identifier discrete_range optional_formal_part) ; optional list optional_select_alternative_list; optional_select_alternative_list: optional_select_alternative_listNil () | optional_select_alternative_listCons (or_select_alternative optional_select_alternative_list) ; selective_wait: SelectiveWait (select_alternative optional_select_alternative_list optional_else) ; or_select_alternative: OrSelectAlternative (select_alternative) ; select_alternative: SelectAlternativePH () | SelectAlternativeAccept (optional_when_condition accept_alternative) | SelectAlternativeDelay (optional_when_condition delay_alternative) | SelectAlternativeTerminate (optional_when_condition pragma_choice_list pragma_choice_list) ; accept_alternative: AcceptAlternative (pragma_choice_list accept_statement optional_statement_list) ; delay_alternative: DelayAlternative (pragma_choice_list delay_statement optional_statement_list) ; accept_statement: AcceptStatement (identifier optional_entry_index_formal_part optional_do_end) ; delay_statement: DelayStatement (expression) #if ADA95 | DelayUntilStatement (expression) #endif ADA95 ; entry_call: EntryCall (name) ; conditional_entry_call: ConditionalEntryCall (entry_call optional_statement_list right_comment_line statement_list) ; timed_entry_call: TimedEntryCall (entry_call optional_statement_list delay_alternative) ; optional optional_entry_index_formal_part; optional_entry_index_formal_part: NoIndexNoFormalPart () | EntryIndexFormalPartPH () | EntryIndexFormalPart (expression parameter_specification_list) | FormalPart (parameter_specification_list) | EntryIndex (expression) ; #if AD9A5 protected_definition: ~p ProtectedDefinition (is_entry_list optional_protected_definition_private_part) ; optional optional_protected_definition_private_part; optional_protected_definition_private_part: OptionalProtectedDefinitionPrivatePartNil() | OptionalProtectedDefinitionPrivatePart (is_entry_list) ; single_task_declaration: ~p SingleTaskDeclaration (identifier optional_is_entry) ; single_protected_declaration: ~p SingleProtectedDefinition (identifier protected_definition) ; protected_body: ~p ProtectedBody (identifier protected_operation_item_list) ; list protected_operation_item_list; protected_operation_item_list: protected_operation_item_listNil () | protected_operation_item_listCons (protected_operation_item protected_operation_item_list) ; protected_operation_item: ~p ProtectedOperationPH () | ProtectedOperationSubprogram (subprogram_declaration right_comment_line) | ProtectedOperationBody (subprogram_body) | ProtectedOperationEntry (entry_body) | ProtectedOperationRep (representation_clause right_comment_line) | ProtectedOperationPragma (pragma_clause) | protected_operation_item_Comment (left_comment_line) | protected_operation_item_Blank (STR) | ProtectedOperationFreeform (freeform_text protected_operation_item_list) | ProtectedOperationPreprocessor (preprocessor_line) ; entry_body: ~p EntryBody (identifier optional_entry_index_specification optional_formal_part expression declaration_list begin_end) ; optional optional_entry_index_specification; optional_entry_index_specification: ~p OptionalEntryIndexSpecificationNil () | OptionalEntryIndexSpecification (identifier discrete_range) ; optional optional_with_abort; optional_with_abort: ~p OptionalWithAbortNil () | OptionalWithAbortPH () | OptionalWithAbort () ; asynchronous_select: ~p AsynchronousSelect (statement_list statement_list) ; #endif ADA95

Section 10. Program Structure

/* 10.1, 10.2 ----------------------------------------------------- */ list compilation_unit_list;
compilation_unit_list: compilation_unit_listNil () | compilation_unit_listCons (compilation_item compilation_unit_list) ; optional list context_clause_list; context_clause_list: context_clause_listNil () | context_clause_listCons (context_clause context_clause_list) ; compilation: Compilation (compilation_unit_list) ; compilation_item: CompilationItemPH () | CompilationItemUnit (compilation_unit) | CompilationItemPragma (pragma_clause) | CompilationItemComment (left_comment_line) | CompilationItemBlank (STR) | CompilationItemCommentedOut (CHAR compilation_unit_list right_comment_line STR) | CompilationItemCommentedOutText (CHAR STR) | CompilationItemPreprocessor (preprocessor_line) | CompilationItemFreeform (freeform_text compilation_unit_list) ; co_compilation_unit_list: CoCompilationUnitListNil () | CoCompilationUnitList (compilation_unit_list STR STR) ; compilation_unit: OnlyChoice (context_clause_list program_unit) ; context_clause: ContextChoicePH () | ContextPragma (pragma_clause) | ContextComment (left_comment_line) | ContextBlank (STR) | ContextWith (with_clause) | ContextUse (use_clause) | ContextPreprocessor (preprocessor_line) | ContextFreeform (freeform_text context_clause_list) ; program_unit: #if ADA95 ProgramUnitDeclaration (optional_private program_unit_declaration) #else ProgramUnitDeclaration (program_unit_declaration) #endif ADA95 | ProgramUnitBody (program_unit_body) #if ADA95 | ProgramUnitRenaming (optional_private program_unit_renaming) #endif ADA95 ; #if ADA95 program_unit_renaming: ~p ProgramUnitRenamingPH () | ProgramUnitRenamingSubprogram (subprogram_specification name) | ProgramUnitRenamingGeneric (generic_renaming_declaration) | ProgramUnitRenamingPackage (expanded_name expanded_name) ; #endif ADA95 program_unit_declaration: ProgramUnitDeclarationPH () | SubprogramBasicDeclaration (subprogram_declaration) | PackageBasicDeclaration (package_declaration) | GenericBasicDeclaration (generic_declaration) | GenericInstantiationDeclaration (generic_instantiation) ; program_unit_body: ProgramUnitBodyPH () | ProgramUnitBodySubprogramBody (subprogram_body) | ProgramUnitBodyPackageBody (package_body) | ProgramUnitBodySubunit (expanded_name optional_left_comment_line_list proper_body) ; #if ADA95 with_clause: WithClause (expanded_name_list right_comment_line) ; #else with_clause: ~p WithClause (identifier_list right_comment_line) ; #endif ADA95 body_stub: BodyStubPH () | BodyStubSubprogram (subprogram_specification) | BodyStubTask (identifier) #if ADA95 | BodyStubProtected (identifier) | BodyStubPackage (expanded_name) #else | BodyStubPackage (identifier) #endif ADA95 ; #if ADA95 optional optional_private; optional_private: OptionalPrivateNil() | OptionalPrivatePH() | OptionalPrivate() ; #endif ADA95

Section 11. Exceptions

/* 11.2 ----------------------------------------------------------- */
exception_handler: ExceptionHandler ( #if ADA95 optional_choice_parameter #endif ADA95 exception_choice_list statement_list) | ExceptionHandlerPreprocessor (preprocessor_line) | ExceptionHandlerFreeform (freeform_text exception_handler_list) ; list exception_choice_list; exception_choice_list: exception_choice_listNil () | exception_choice_listCons (exception_choice exception_choice_list) ; exception_choice: ExceptionChoicePH () | ExceptionChoiceName (name) | ExceptionChoiceOthers () ; #if ADA95 optional optional_choice_parameter; optional_choice_parameter: ~p OptionalChoiceParameterNil() | OptionalChoiceParameter(identifier) ; #endif ADA95

Section 12. Generic Units

/* 12.1 ----------------------------------------------------------- */ /* abstract syntax for generic declaration ------------------------ */ optional list generic_formal_part;
generic_formal_part: generic_formal_partNil () | generic_formal_partCons (generic_parameter_declaration generic_formal_part) ; generic_declaration: GenericDeclarationPH () | GenericDeclarationSubprogram (generic_formal_part subprogram_specification) | GenericDeclarationPackage (generic_formal_part package_specification) ; generic_parameter_declaration: GenericParameterDeclarationPH () | GenericParameterSpecification (parameter_specification) #if ADA95 #else | GenericPrivateTypeDeclaration (private_type_declaration) #endif ADA95 | GenericParameterTypeDefinition (identifier #if ADA95 optional_discriminant_part #endif ADA95 generic_type_definition) | GenericParameterSubprogram (subprogram_specification optional_is_name) | GenericParameterComment (left_comment_line) | GenericParameterBlank (STR) | GenericParameterPreprocessor (preprocessor_line) | GenericParameterFreeform (freeform_text generic_formal_part) #if ADA95 | GenericParameterUseClause (use_clause) | GenericParameterPackage (identifier name formal_package_actual_part) #endif ADA95 ; generic_type_definition: GenericTypeDefinitionPH () | GenericConstrainedArray (constrained_array_definition) | GenericUnconstrainedArray (unconstrained_array_definition) | GenericAccessType (access_type_definition) | GenericTypeBox () | GenericTypeRangeBox () | GenericTypeDigitsBox () | GenericTypeDeltaBox () #if ADA95 | GenericTypeModBox () | GenericTypeDeltaDigitsBox () | GenericTypePrivate (optional_tagged optional_limited) | GenericTypeDerived (optional_abstract type_mark optional_with_private) #endif ADA95 ; optional optional_is_name; optional_is_name: IsNameNil () | IsNamePH () | IsNameBox () | IsNameName (name) ; /* 12.3 ----------------------------------------------------------- */ generic_instantiation: GenericInstantiationPH () | GenericInstantiationPackage ( #if ADA95 expanded_name #else identifier #endif ADA95 optional_left_comment_line_list expanded_name association_list) | GenericInstantiationProcedure ( #if ADA95 expanded_name #else identifier #endif ADA95 invisible_formal_part optional_left_comment_line_list expanded_name association_list) | GenericInstantiationFunction (designator optional_left_comment_line_list expanded_designator association_list) ; invisible_formal_part: ~p invisible_formal_partNil () | invisible_formal_partOption (parameter_specification_list) ; #if ADA95 optional optional_with_private; optional_with_private: OptionalWithPrivateNil () | OptionalWithPrivatePH () | OptionalWithPrivate () ; formal_package_actual_part: FormalPackageActualPartNil () | FormalPackageActualPartBox () ; #endif ADA95

Section 13. Representation Clauses

/* 13.1, 13.2, 13.3, 13.4, 13.5 ----------------------------------- */
representation_clause: RepresentationClausePH () | RepresentationClauseType (type_representation_clause) | RepresentationClauseAddress (address_clause) ; type_representation_clause: TypeRepresentationClausePH () | TypeRepresentationClauseLength (length_clause) | TypeRepresentationClauseEnumRep (enumeration_representation_clause) | TypeRepresentationClauseRecord (record_representation_clause) ; address_clause: AddressClause (identifier expression) ; length_clause: LengthClause (name expression) ; enumeration_representation_clause: EnumRepresentationClause (identifier aggregate) ; record_representation_clause: RecordRepresentationClause (identifier optional_alignment_clause component_clause_list) ; optional optional_alignment_clause; optional_alignment_clause: AlignmentClauseNil () | AlignmentClause (expression) ; optional list component_clause_list; component_clause_list: component_clause_listNil () | component_clause_listCons (component_clause component_clause_list) ; component_clause: ComponentClausePH () | ComponentClause (name expression range right_comment_line) | ComponentClausePragma (pragma_clause) | component_clause_Comment (left_comment_line) | component_clause_Blank (STR) | ComponentClauseFreeform (freeform_text component_clause_list) | ComponentClausePreprocessor (preprocessor_line) ;