. Syntax of the Pascal Programming Language .See ASCII ASCII::=http://www/dick/samples/comp.text.ASCII.html. .See LEXEMES LEXEMES::=http://www/dick/samples/pascal.lexicon.html. .Open SYNTAX . Programs and Blocks program ::= $program_heading semicolon program_block, .As_is program hi(out); begin writeln('Hello, World!'); end. program_heading::="program" identifier ("(" $O( program_parameters) ")" |), .As_is program merge(infile1, infile2, mergedfile); program_block::= $block ".", .As_is begin writeln('Hi'); writeln('there!'); end . block::= $label_declarations $constant_definitions $type_definitions $variable_declarations $procedure_function_declarations $statement_part, .As_is const n=1; m=2; begin writeln(m+n); end program_parameters::= $List(identifier), .As_is in,out,waveItAllAbout .Open Declarations and Definitions label_declarations::= $O("label" $List($label) semicolon ), label::= $digit_sequence, .As_is label 1,2,3,911; constant_definitions::= $O("const" $S($constant_definition) semicolon), constant_definition::= identifier "=" constant, type_definitions::= $O("type" $type_definition semicolon #($type_definition semicolon) ), type_definition::= identifier "=" type_denoter, variable_declarations::= $O("var" $variable_declaration semicolon #($variable_declaration semicolon) ), variable_declaration::= $identifier_list ":" $type_denoter, procedure_function_declarations::= #( $procedure_declaration | $function_declaration ) semicolon, .Open Subprogram Declarations subprogram_declaration::=$procedure_declaration | $function_declaration. . Procedure Declarations procedure_declaration::= $procedure_heading semicolon $directive | $procedure_identification semicolon $procedure_block | $procedure_heading semicolon $procedure_block, procedure_heading::= "procedure" identifier $O($formal_parameter_list), procedure_identification::= "procedure" $procedure_identifier, procedure_block::= $block, procedure_identifier::= identifier, directive::= letter #(letter | digit), type_denoter::= $type_identifier | $new_type, . Function Declarations function_declaration::= $function_heading semicolon $directive | $function_identification semicolon $function_block | $function_heading semicolon $function_block, function_heading::= "function" identifier ($formal_parameter_list |) ":" $result_type, function_block::= $block. . Formal Parameters and Arguments formal_parameter_list::= $formal_parameter_section #( semicolon $formal_parameter_section), formal_parameter_section::= $value_parameter_specification | $variable_parameter_specification | $procedural_parameter_specification | $functional_parameter_specification | $conformant_array_parameter_specification, value_parameter_specification::= $identifier_list ":" $type_identifier, variable_parameter_specification::= "var" $identifier_list ":" $type_identifier, procedural_parameter_specification::= $procedure_heading, functional_parameter_specification::= $function_heading, conformant_array_parameter_specification::= $value_conformant_array_specification | $variable_conformant_array_specification, value_conformant_array_specification::= $identifier_list ":" $conformant_array_schema, variable_conformant_array_specification::= "var" $identifier_list ":" $conformant_array_schema, conformant_array_schema::= $packed_conformant_array_schema | $unpacked_conformant_array_schema, packed_conformant_array_schema::= "packed" "array" $O($index_type_specification ) "of" $type_identifier, unpacked_conformant_array_schema::= "array" $O($index_type_specification #(semicolon $index_type_specification) ) "of" $type_identifier | $conformant_array_schema, index_type_specfication::= identifier ".." identifier ":" $ordinal_type_identifier, .Close .Close . Constants constant::= $signed_number | $constant_identifier | $character_string, unsigned_constant::= $unsigned_number | $character_string | $constant_identifier | "nil", unsigned_number::= $unsigned_integer | $unsigned_real, constant_identifier::= identifier, . Types type_identifier::= identifier, new_type::= $new_ordinal_type | $new_structured_type | $new_pointer_type, result_type::= $simple_type_identifier | $pointer_type_identifier, new_ordinal_type::= $enumerated_type | $subrange_type, new_structured_type::= $O("packed") $unpacked_structured_type, new_pointer_type::= "^" $domain_type, simple_type_identifier::= $type_identifier, pointer_type_identifier::= $type_identifier, enumerated_type::= $identifier_list, subrange_type::= $constant ".." $constant, unpacked_structured_type::= $array_type | $record_type | $set_type | $file_type, domain_type::= $type_identifier, array_type::= "array" #($index_type #("," $index_type) ) "of" $component_type, set_type::= "set of" $base_type, file_type::= "file of" $component_type, index_type::= $ordinal_type, component_type::= $type_denoter, base_type::= $ordinal_type, ordinal_type::= $new_ordinal_type | $ordinal_type_identifier, ordinal_type_identifier::= $type_identifier, record_type::= "record" $field_list "end", record_section::= $identifier_list ":" $type_denoter, field_list::= $O( $fixed_part #( semicolon $variant_part ) , fixed_part::= $record_section #( semicolon $record_section), variant_part::= "case" $variant_selector "of" $variant #( semicolon $variant), variant_selector::= $O( $tag_field ":" ) $tag_type, variant::= $case_constant_list ":" $field_list, tag_field::= $identifier, tag_type::= $ordinal_type_identifier, case_constant_list::= $case_constant #( "," $case_constant), case_constant::= $constant, . Statements procedure_statement::= $procedure_identifier $O($actual_parameter_list ) | $IO_procedure_statement, IO_procedure_statement::= "read" read_parameter_list | "readln" readln_parameter_list | "write" write_parameter_list | "writeln" writeln_parameter_list, actual_parameter_list::= $actual_parameter #( "," $actual_parameter), optional_file::=$O($file_variable ","), read_parameter_list::= $optional_file $variable_access #( "," $variable_access), readln_parameter_list::= $O( $optional_file $variable_access #( "," $variable_access) ), write_parameter_list::= $optional_file $write_parameter #( "," $write_parameter), writeln_parameter_list::= $O($optional_file $write_parameter #( "," $write_parameter) ), actual_parameter::= $expression | $variable_access | $procedure_identifier | $function_identifier, file_variable::= $variable_access, variable_access::= $entire_variable | $component_variable | $identified_variable | $buffer_varible, write_parameter::= $expression $O( ":" O(":" $expression ) ), statement_part::= $compound_statement, compound_statement::= "begin" $statement_sequence "end", statement_sequence::= $statement #($semicolon $statement), statement::= $O( $label ":" ) ($simple_statement | $structured_statement), simple_statement::= $empty_statement | $assignment_statement | $procedure_statement | $goto_statement, structured_statement::= $compound_statement | $conditional_statement | $repetitive_statement | $with_statement, empty_statement::=, assignment_statement::= $variable_access | $function_identifier ":=" $expression, goto_statement::= "goto" $label, conditional_statement::= $if_statement | $case_statement, repetitive_statement::= $repeat_statement | $while_statement | $for_statement, loop::= $repeat_statement | $while_statement | $for_statement, with_statement::= "with" $record_variable_list "do" $statement, if_statement::= "if" $boolean_expression "then" $statement $O($else_part ), case_statement::= "case" $case_index "of" $case_list_element #(semicolon $case_list_element) $O(semicolon |) "end", repeat_statement::= "repeat" $statement_sequence "until" $boolean_expression, while_statement::= "while" $boolean_expression "do" $statement, for_statement::= "for" $control_variable ":=" $initial_value ("to" | "downto") $final_value "do" $statement, record_variable_list::= $record_variable #("," $record_variable), boolean_expression::= $expression, else_part::= "else" $statement, case_index::= $expression, case_list_element::= $case_constant_list ":" $statement, control_variable::= $entire_variable, initial_value::= $expression, final_value::= $expression, . Expressions and Variables expression::= $simple_expression #($relational_operator $simple_expression ), function_identifier::= $identifier, entire_variable::= $variable_identifier, component_variable::= $indexed_variable | $field_designator, identified_variable::= $pointer_variable "^", buffer_variable::= $file_variable "^", simple_expression::= $O($sign) $term #($adding_operator $term), variable_identifier::= identifier, indexed_variable::= $array_variable "[" $O($index_expression #("," $index_expression) ) "]" , field_designator::= $record_variable "." $field_specifier | $field_designator_identifier, pointer_variable::= $variable_access, term::= $factor #(multiplying_operator $factor), array_variable::= $variable_access, index_expression::= $expression, record_variable::= $variable_access, field_specifier::= $field_identifier, field_designator_identifier::= $identifier, factor::= $variable_access | $unsigned_constant | $function_designator | $set_constructor | $expression | "not" $factor, | $bound_identifier, field_identifier::= $identifier, set_constructor::= $O( #($member_designator #("," $member_designator)) ), bound_identifier::= $identifier, member_designator::= $expression #(".." $expression), function_identification::= "function" $function_identifier, function_designator::= $function_identifier $O($actual_parameter_list ), .Close SYNTAX . Notation $O(X)::= empty | X. #(X)::= `any number of X`. S(X)::= X #(";" X). List(X)::= X #("," X). . Semantics and UML Model .See https://gforge.inria.fr/scm/viewvc.php/*checkout*/AtlanticRaster/all/Pascal.png?root=atlantic-zoos