actual_function= FUNCTION_NAME . actual_parameter_list= '(' actual_parameter { ',' actual_parameter } ')' . actual_parameter= actual_value | actual_variable | actual_procedure | actual_function . actual_procedure= PROCEDURE_NAME . actual_value= expression . actual_variable= variable . addition_operator= '+' | '-' | OR . array_type= ARRAY '[' index_type { ',' index_type } ']' OF element_type . array_variable= variable . assignment_statement= ( variable | FUNCTION_NAME ) ':=' expression . base_type= type . block= declaration_part statement_part . bound_specification= NAME '..' NAME ':' ordinal_type_identifier . case_element= case_label_list ':' statement . case_label_list= constant { ',' constant } . case_statement= CASE expression OF case_element { ';' case_element } [ ';' ] END . component_variable= indexed_variable | field_designator | file_buffer . compound_statement= BEGIN statement_sequence END . conditional_statement= if_statement | case_statement . conformant_array_schema= packed_conformant_array_schema | unpacked_conformant_array_schema . constant_definition_part= CONST constant_definition ';' { constant_definition ';' } . constant_definition= NAME '=' constant . constant= [ '+' | '-' ] ( CONSTANT_NAME | number ) | STRING . declaration_part= [ label_declaration_part ] [ constant_definition_part ] [ type_definition_part ] [ variable_declaration_part ] directive= FORWARD . element_list= [ expression { ',' expression } ] . element_type= type . entire_variable= VARIABLE_NAME | FIELD_NAME . enumerated_type= '(' identifier_list ')' . expression_list= expression { ',' expression } . expression= simple_expression [ relational_operator simple_expression ] . factor= NUMBER | STRING | NIL | CONSTANT_NAME | set | variable | function_designator | '(' expression ')' | NOT factor . field_designator= record_variable '.' FIELD_NAME . field_list= [ ( fixed_part [ ';' variant_part ] | variant_part ) [ ';' ] ] . field_width= expression . file_buffer= file_variable '^' . file_component_type= type . file_type= FILE OF file_component_type . file_variable= variable . final_expression= expression . fixed_part= record_section { ';' record_section } . for_statement= FOR VARIABLE_NAME ':=' initial_expression ( TO | DOWNTO ) final_expression DO statement . formal_parameter_list= '(' formal_parameter_section { ';' formal_parameter_section } ')' . formal_parameter_section= value_parameter_section | variable_parameter_section | procedure_parameter_section | function_parameter_section . fraction_length= expression . function_declaration= function_heading ';' ( block | directive ) . function_designator= FUNCTION_NAME [ actual_parameter_list ] . function_heading= FUNCTION NAME [ formal_parameter_list ] ':' result_type . function_parameter_section= function_heading . goto_statement= GOTO label . identifier_list= NAME { ',' NAME } . if_statement= IF expression THEN statement [ ELSE statement ] . index_type= simple_type . indexed_variable= array_variable '[' expression_list ']' . initial_expression= expression . integer_number= NUMBER . label_declaration_part= LABEL label { ',' label } ';' . label= NUMBER . lower_bound= constant . multiplication_operator= '*' | '/' | DIV | MOD | AND . number= integer_number | real_number . ordinal_type_identifier= TYPE_NAME . output_list= output_value { ',' output_value } . output_value= expression [ ';' field_width [ ':' fraction_length ] ] . packed_conformant_array_schema= PACKED ARRAY '[' bound_specification ']' OF TYPE_NAME . parameter_type= TYPE_NAME | conformant_array_schema . pointer_type= '^' TYPE_NAME . pointer_variable= variable . procedure_and_function_declaration_part . procedure_and_function_declaration_part= { ( procedure_declaration | function_declaration ) ';' } . procedure_declaration= procedure_heading ';' ( block | directive ) . procedure_heading= PROCEDURE NAME [ formal_parameter_list ] . procedure_parameter_section= procedure_heading . procedure_statement= PROCEDURE_NAME [ actual_parameter_list ] . program_heading= PROGRAM NAME '(' identifier_list ')' ';' . program= program_heading block '.' . real_number= NUMBER . record_section= identifier_list ':' type . record_type= RECORD field_list END . record_variable= variable . referenced_variable= pointer_variable '^' . relational_operator= '=' | '<>' | '<' | '<=' | '>' | '>=' | IN . repeat_statement= REPEAT statement_sequence UNTIL expression . repetitive_statement= while_statement | repeat_statement | for_statement . result_type= TYPE_NAME . set_type= SET OF base_type . set= '[' element_list ']' . simple_expression= [ '+' | '-' ] term { addition_operator term } . simple_statement= [ assignment_statement | procedure_statement | goto_statement ] . simple_type= subrange_type | enumerated_type . statement_part= BEGIN statement_sequence END . statement_sequence= statement { ';' statement } . statement= [ LABEL ':' ] ( simple_statement | structured_statement ) . structured_statement= compound_statement | repetitive_statement | conditional_statement | with_statement . structured_type= [ PACKED ] unpacked_structured_type . subrange_type= lower_bound '..' upper_bound . tag_field= [ NAME ':' ] . term= factor { multiplication_operator factor } . type_definition_part= TYPE type_definition ';' { type_definition ';' } . type_definition= NAME '=' type . type= simple_type | structured_type | pointer_type | TYPE_NAME . unpacked_conformant_array_schema= ARRAY '[' bound_specification { ';' bound_specification } ']' OF ( TYPE_NAME | conformant_array_schema ) . unpacked_structured_type= array_type | record_type | set_type | file_type . upper_bound= constant . value_parameter_section= identifier_list ':' parameter_type . variable_declaration_part= VAR variable_declaration ';' { variable_declaration ';' } . variable_declaration= identifier_list ':' type . variable_parameter_section= VAR identifier_list ':' parameter_type . variable= entire_variable | component_variable | referenced_variable . variant_part= CASE tag_field TYPE_NAME OF variant { ';' variant } . variant= case_label_list ':' '(' field_list ')' . while_statement= WHILE expression DO statement . with_statement= WITH record_variable { ',' record_variable } DO statement .