This syntax is translated from the Syntax in the Ada Language Refferrnce Manual kept at the Ada Joint Projects Agency (ajpo.sei.cmu.edu). 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 #((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 ("."integer|) (exponent|). integer::= digit #((underline|) digit). exponent::= "E" ("+"|) integer | "E" "-" integer. 2.4.2 based_literal::= base "#" based_integer ("."based_integer|) "#" (exponent|). base::= integer. based_integer::= extended_digit #((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 ("("argument_association #("," argument_association)")"|)";". argument_association::= (argument_identifier "=>"|) name | (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 ":" ("constant"|) subtype_indication (":=" expression|)";" | identifier_list ":" ("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 (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 (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 (range_constraint|). floating_accuracy_definition::= "digits" static_simple_expression. 3.5.9 fixed_point_constraint::= fixed_accuracy_definition (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 (":=" expression|)";". component_subtype_definition::= subtype_indication. 3.7.1 discriminant_part::= "("discriminant_specification #(";" discriminant_specification)")". discriminant_specification::= identifier_list ":" type_mark (":=" 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 (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 ("("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 (relational_operator simple_expression|) | simple_expression ("not"|) "in" range | simple_expression ("not"|) "in" type_mark. simple_expression::= (unary_adding_operator|) term #(binary_adding_operator term). term::= factor #(multiplying_operator factor). factor::= primary ("**" 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) ("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::= (loop_simple_name:|) (iteration_scheme|) "loop" sequence_of_statements "end loop" (loop_simple_name|)";". iteration_scheme::= "while" condition | "for" loop_parameter_specification. loop_parameter_specification::= identifier "in" ("reverse"|) discrete_range. 5.6 block_statement::= (block_simple_name":"|) ("declare" declarative_part|) "begin" sequence_of_statements ("exception" exception_handler #(exception_handler)|) "end" (block_simple_name|)";". 5.7 exit_statement::= "exit" (loop_name|) ("when" condition|)";". 5.8 return_statement::= "return" (expression|)";". 5.9 goto_statement::= "goto" label_name";" .. 6.1 subprogram_declaration::= subprogram_specification";". subprogram_specification::= "procedure" identifier (formal_part|) | "function" designator (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 (":=" expression|). mode::= ("in"|) | "in out" | "out". 6.3 subprogram_body::= subprogram_specification "is" (declarative_part|) "begin" sequence_of_statements ("exception" exception_handler #(exception_handler)|) "end" (designator|)";". 6.4 procedure_call_statement::= procedure_name (actual_parameter_part|)";". function_call::= function_name (actual_parameter_part|). actual_parameter_part::= "("parameter_association #("," parameter_association)")". parameter_association::= (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) ("private" #(basic_declarative_item)|) "end" (package_simple_name|). package_body::= "package body" package_simple_name "is" (declarative_part|) ("begin" sequence_of_statements ("exception" exception_handler #(exception_handler)|)|) "end" (package_simple_name|)";". 7.4 private_type_declaration::= "type" identifier (discriminant_part|) "is" ("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" ("type"|) identifier ("is" #(entry_declaration) #(representation_clause) "end" (task_simple_name|)|). task_body::= "task body" task_simple_name "is" (declarative_part|) "begin" sequence_of_statements ("exception" exception_handler #(exception_handler)|) "end" (task_simple_name|)";". 9.5 entry_declaration::= entry identifier ("("discrete_range")"|) (formal_part|)";". entry_call_statement::= entry_name (actual_parameter_part|)";". accept_statement::= "accept" entry_simple_name ("("entry_index")"|) (formal_part|) (do sequence_of_statements "end" (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) ("else" sequence_of_statements|) "end select;". select_alternative::= ("when" condition "=>"|) selective_wait_alternative. selective_wait_alternative::= accept_alternative | delay_alternative | terminate_alternative. accept_alternative::= accept_statement (sequence_of_statements|). delay_alternative::= delay_statement (sequence_of_statements|). terminate_alternative::= "terminate;". conditional_entry_call::= "select" entry_call_statement (sequence_of_statements|) "else" sequence_of_statements "end select;". 9.7.3 timed_entry_call::= "select" entry_call_statement (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" (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 ":" ("in" ("out"|)|) type_mark (":=" expression|)";" | "type" identifier "is" generic_type_definition";" | private_type_declaration | "with" subprogram_specification ("is" name|)";" | "with" subprogram_specification ("is <>"|)";". generic_type_definition::= "(<>)" | "range <>" | "digits <>" | "delta <>" | array_type_definition | access_type_definition. 12.3 generic_instantiation::= "package" identifier "is" "new" generic_package_name (generic_actual_part|)";" | "procedure" identifier "is" "new" generic_procedure_name (generic_actual_part|)";" | "function" designator "is" "new" generic_function_name (generic_actual_part|)";". generic_actual_part::= "("generic_association #("," generic_association)")". generic_association::= (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" (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";".