.See /u/faculty/dick/cs320/ada/glossary This syntax is translated from the Syntax in the Ada Language Refferrnce Manual kept at the Ada Joint Projects Agency (ajpo.sei.cmu.edu). The numbers refer to the relevant section of the LRM (Language Reference Manual). Macros O::=`Optional (_)`. O::=( (_) |). Lexemes upper_case_letter::="A".."Z". lower_case_letter::="a".."z". digit::="0".."9". 2.1 graphic_character::= basic_graphic_character | lower_case_letter | other_special_character. basic_graphic_character::= upper_case_letter | digit | special_character | space_character. basic_character::= basic_graphic_character | format_effector. 2.3 identifier::= letter #(O(underline) letter_or_digit). letter_or_digit::= letter | digit. letter::= upper_case_letter | lower_case_letter. 2.4 numeric_literal::= decimal_literal | based_literal. 2.4.1 decimal_literal::= integer O("."integer) O(exponent). integer::= digit #(O(underline ) digit). exponent::= "E" O("+") integer | "E" "-" integer. 2.4.2 based_literal::= base "#" based_integer O("."based_integer) "#" O(exponent). base::= integer. based_integer::= extended_digit #(O(underline ) extended_digit). extended_digit::= digit | letter. 2.5 character_literal::= "'"graphic_character"'". 2.6 string_literal::= quotation_mark #graphic_character quotation_mark. 2.8 pragma::= "pragma" identifier O("("argument_association #("," argument_association)")")";". argument_association::= O(argument_identifier "=>") name | O(argument_identifier "=>") expression. 3.1 basic_declaration::= object_declaration | number_declaration | type_declaration | subtype_declaration | subprogram_declaration | package_declaration | task_declaration | generic_declaration | exception_declaration | generic_instantiation | renaming_declaration | deferred_constant_declaration. 3.2 object_declaration::= identifier_list ":" O("constant") subtype_indication O(":=" expression)";" | identifier_list ":" O("constant") constrained_array_definition ((":=" expression)";". number_declaration::= identifier_list ":" "constant" ":=" universal_static_expression";". identifier_list::= identifier #("," identifier). 3.3.1 type_declaration::= full_type_declaration | incomplete_type_declaration | private_type_declaration. full_type_declaration::= "type" identifier O(discriminant_part) "is" type_definition";". type_definition::= enumeration_type_definition | integer_type_definition | real_type_definition | array_type_definition | record_type_definition | access_type_definition | derived_type_definition. 3.3.2 subtype_declaration::= "subtype" identifier "is" subtype_indication";". subtype_indication::= type_mark O(constraint). type_mark::= type_name | subtype_name. constraint::= range_constraint | floating_point_constraint | fixed_point_constraint | index_constraint | discriminant_constraint. 3.4 derived_type_definition::= "new" subtype_indication. 3.5 range_constraint::= "range" range. range::= range_attribute | simple_expression ".." simple_expression. 3.5.1 enumeration_type_definition::= "("enumeration_literal_specification #("," enumeration_literal_specification)")". enumeration_literal_specification::= enumeration_literal. enumeration_literal::= identifier | character_literal. 3.5.4 integer_type_definition::= range_constraint. 3.5.6 real_type_definition::= floating_point_constraint | fixed_point_constraint. 3.5.7 floating_point_constraint::= floating_accuracy_definition O(range_constraint). floating_accuracy_definition::= "digits" static_simple_expression. 3.5.9 fixed_point_constraint::= fixed_accuracy_definition O(range_constraint). fixed_accuracy_definition::= "delta" static_simple_expression. 3.6 array_type_definition::= unconstrained_array_definition | constrained_array_definition. unconstrained_array_definition::= "array("index_subtype_definition #("," index_subtype_definition)")" "of" component_subtype_indication. constrained_array_definition::= "array" index_constraint "of" component_subtype_indication. index_subtype_definition::= type_mark "range <>". index_constraint::= "("discrete_range #("," discrete_range)")". discrete_range::= discrete_subtype_indication | range. 3.7 record_type_definition::= "record" component_list "end record". component_list::= component_declaration #(component_declaration) | #(component_declaration) variant_part | "null;". component_declaration::= identifier_list ":" component_subtype_definition O(":=" expression)";". component_subtype_definition::= subtype_indication. 3.7.1 discriminant_part::= "("discriminant_specification #(";" discriminant_specification)")". discriminant_specification::= identifier_list ":" type_mark O(":=" expression). 3.7.2 discriminant_constraint::= "("discriminant_association #("," discriminant_association)")". discriminant_association::= (discriminant_simple_name #( "|" discriminant_simple_name "=>") expression. 3.7.3 variant_part::= "case" discriminant_simple_name "is" variant #(variant) "end case;". variant::= "when" choice #( "|" choice) "=>" component_list. choice::= simple_expression | discrete_range | "others" | component_simple_name . 3.8 access_type_definition::= "access" subtype_indication. 3.8.1 incomplete_type_declaration::= "type" identifier O(discriminant_part)";". 3.9 declarative_part::= #(basic_declarative_item) #(later_declarative_item). basic_declarative_item::= basic_declaration | representation_clause | use_clause. later_declarative_item::= body | subprogram_declaration | package_declaration | task_declaration | generic_declaration | use_clause | generic_instantiation. body::= proper_body | body_stub. proper_body::= subprogram_body | package_body | task_body. 4.1 name::= simple_name | character_literal | operator_symbol | indexed_component | slice | selected_component | attribute. simple_name::= identifier. prefix::= name | function_call. 4.1.1 indexed_component::= prefix"("expression #("," expression)")". 4.1.2 slice::= prefix"("discrete_range")". 4.1.3 selected_component::= prefix"."selector. selector::= simple_name | character_literal | operator_symbol | "all". 4.1.4 attribute::= prefix"'"attribute_designator. attribute_designator::= simple_name O("("universal_static_expression")"). 4.3 aggregate::= "("component_association #("," component_association)")". component_association::= (choice #("|" choice) "=>") expression. 4.4 expression::= relation #("and" relation) | relation #("and then" relation) | relation #("or" relation) | relation #("or else" relation) | relation #("xor" relation). relation::= simple_expression O(relational_operator simple_expression) | simple_expression O("not") "in" range | simple_expression O("not") "in" type_mark. simple_expression::= O(unary_adding_operator) term #(binary_adding_operator term). term::= factor #(multiplying_operator factor). factor::= primary O("**" primary) | "abs" primary | "not" primary. primary::= numeric_literal | "null" | aggregate | string_literal | name | allocator | function_call | type_conversion | qualified_expression | "("expression")". 4.5 logical_operator::= "and" | "or" | "xor". relational_operator::= "=" | "/=" | "<" | "<=" | ">" | ">=". binary_adding_operator::= "+" | "-" | "&". unary_adding_operator::= "+" | "-". multiplying_operator::= "*" | "/" | "mod" | "rem". highest_precedence_operator::= "**" | "abs" | "not". 4.6 type_conversion::= type_mark"("expression")". 4.7 qualified_expression::= type_mark"'("expression")" | type_mark"'"aggregate. 4.8 allocator::= "new" subtype_indication | "new" qualified_expression. 5.1 sequence_of_statements::= statement #(statement). statement::= #(label) simple_statement | #(label) compound_statement. simple_statement::= null_statement | assignment_statement | procedure_call_statement | exit_statement | return_statement | goto_statement | entry_call_statement | delay_statement | abort_statement | raise_statement | code_statement. compound_statement::= if_statement | case_statement | loop_statement | block_statement | accept_statement | select_statement. label::= "<<"label_simple_name">>". null_statement::= "null;". 5.2 assignment_statement::= variable_name ":=" expression";". 5.3 if_statement::= "if" condition "then" sequence_of_statements #("elsif" condition "then" sequence_of_statements) O("else" sequence_of_statements ) "end if;". condition::= boolean_expression. 5.4 case_statement::= "case" expression "is" case_statement_alternative #(case_statement_alternative) "end case;". case_statement_alternative::= "when" choice #(" | " choice ) "=>" sequence_of_statements. 5.5 loop_statement::= O(loop_simple_name":") O(iteration_scheme) "loop" sequence_of_statements "end loop" ) O(loop_simple_name)";". iteration_scheme::= "while" condition | "for" loop_parameter_specification. loop_parameter_specification::= identifier "in" O("reverse") discrete_range. 5.6 block_statement::= O(block_simple_name":") O("declare" declarative_part) "begin" sequence_of_statements O("exception" exception_handler #(exception_handler)) "end" O(block_simple_name)";". 5.7 exit_statement::= "exit" O(loop_name) O("when" condition)";". 5.8 return_statement::= "return" O(expression)";". 5.9 goto_statement::= "goto" label_name";" .. 6.1 subprogram_declaration::= subprogram_specification";". subprogram_specification::= "procedure" identifier O(formal_part) | "function" designator O(formal_part) "return" type_mark. designator::= identifier | operator_symbol. operator_symbol::= string_literal. formal_part::= "("parameter_specification #(";" parameter_specification)")". parameter_specification::= identifier_list ":" mode type_mark O(":=" expression). mode::= O("in") | "in out" | "out". 6.3 subprogram_body::= subprogram_specification "is" O(declarative_part) "begin" sequence_of_statements O("exception" exception_handler #(exception_handler)) "end" O(designator)";". 6.4 procedure_call_statement::= procedure_name O(actual_parameter_part)";". function_call::= function_name O(actual_parameter_part). actual_parameter_part::= "("parameter_association #("," parameter_association)")". parameter_association::= O(formal_parameter "=>") actual_parameter. formal_parameter::= parameter_simple_name. actual_parameter::= expression | variable_name | type_mark"("variable_name")". 7.1 package_declaration::= package_specification";". package_specification::= "package" identifier "is" #(basic_declarative_item) O("private" #(basic_declarative_item) ) "end" O(package_simple_name). package_body::= "package body" package_simple_name "is" O(declarative_part) O("begin" sequence_of_statements O("exception" exception_handler #(exception_handler))) "end" O(package_simple_name)";". 7.4 private_type_declaration::= "type" identifier O(discriminant_part) "is" O("limited") "private;". deferred_constant_declaration::= identifier_list ":" "constant" type_mark";". 8.4 use_clause::= "use" package_name #("," package_name)";". 8.5 renaming_declaration::= identifier ":" type_mark "renames" object_name";" | identifier ":" "exception" "renames" exception_name";" | "package" identifier "renames" package_name";" | subprogram_specification "renames" subprogram_or_entry_name";". 9.1 task_declaration::= task_specification";". task_specification::= "task" O("type") identifier O("is" #(entry_declaration) #(representation_clause) "end" O(task_simple_name)). task_body::= "task body" task_simple_name "is" O(declarative_part) "begin" sequence_of_statements O("exception" exception_handler #(exception_handler)) "end" O(task_simple_name)";". 9.5 entry_declaration::= entry identifier O("("discrete_range")") O(formal_part)";". entry_call_statement::= entry_name O(actual_parameter_part)";". accept_statement::= "accept" entry_simple_name O("("entry_index")") O(formal_part) O("do" sequence_of_statements "end" O(entry_simple_name))";". entry_index::= expression. 9.6 delay_statement::= delay simple_expression";". 9.7 select_statement::= selective_wait | conditional_entry_call | timed_entry_call. 9.7.1 selective_wait::= "select" select_alternative #("or" select_alternative) O("else" sequence_of_statements ) "end select;". select_alternative::= O("when" condition "=>") selective_wait_alternative. selective_wait_alternative::= accept_alternative | delay_alternative | terminate_alternative. accept_alternative::= accept_statement O(sequence_of_statements). delay_alternative::= delay_statement O(sequence_of_statements). terminate_alternative::= "terminate;". conditional_entry_call::= "select" entry_call_statement O(sequence_of_statements) "else" sequence_of_statements "end select;". 9.7.3 timed_entry_call::= "select" entry_call_statement O(sequence_of_statements) "or" delay_alternative "end select;". 9.10 abort_statement::= "abort" task_name #("," task_name)";". 10.1 compilation::= #(compilation_unit). compilation_unit::= context_clause library_unit | context_clause secondary_unit. library_unit::= subprogram_declaration | package_declaration | generic_declaration | generic_instantiation | subprogram_body. secondary_unit::= library_unit_body | subunit. library_unit_body::= subprogram_body | package_body. 10.1.1 context_clause::= #(with_clause #(use_clause)). with_clause::= "with" unit_simple_name #("," unit_simple_name)";". 10.2 body_stub::= subprogram_specification "is separate;" | "package body" package_simple_name "is separate;" | "task body" task_simple_name "is separate;". subunit::= "separate ("parent_unit_name")" proper_body. 11.1 exception_declaration::= identifier_list ":" "exception;". 11.2 exception_handler::= "when" exception_choice #(" | " exception_choice) "=>" sequence_of_statements. exception_choice::= exception_name | "others". 11.3 raise_statement::= "raise" O(exception_name)";". 12.1 generic_declaration::= generic_specification";". generic_specification::= generic_formal_part subprogram_specification | generic_formal_part package_specification. generic_formal_part::= "generic" #(generic_parameter_declaration). generic_parameter_declaration::= identifier_list ":" O("in" O("out" )) type_mark O(":=" expression)";" | "type" identifier "is" generic_type_definition";" | private_type_declaration | "with" subprogram_specification O("is" name)";" | "with" subprogram_specification O("is <>")";". generic_type_definition::= "(<>)" | "range <>" | "digits <>" | "delta <>" | array_type_definition | access_type_definition. 12.3 generic_instantiation::= "package" identifier "is" "new" generic_package_name O(generic_actual_part)";" | "procedure" identifier "is" "new" generic_procedure_name O(generic_actual_part)";" | "function" designator "is" "new" generic_function_name O(generic_actual_part)";". generic_actual_part::= "("generic_association #("," generic_association)")". generic_association::= O(generic_formal_parameter "=>") generic_actual_parameter. generic_formal_parameter::= parameter_simple_name | operator_symbol. generic_actual_parameter::= expression | variable_name | subprogram_name | entry_name | type_mark. 13.1 representation_clause::= type_representation_clause | address_clause. type_representation_clause::= length_clause | enumeration_representation_clause | record_representation_clause. 13.2 length_clause::= "for" attribute "use" simple_expression";". 13.3 enumeration_representation_clause::= "for" type_simple_name "use" aggregate";". 13.4 record_representation_clause::= "for" type_simple_name "use" "record" O(alignment_clause) #(component_clause) "end record;". alignment_clause::= "at mod" static_simple_expression";". component_clause::= component_name "at" static_simple_expression "range" static_range";". 13.5 address_clause::= "for" simple_name "use at" simple_expression";". 13.8 code_statement::= type_mark"'"record_aggregate";".