; Source: http://www.fit.vutbr.cz/study/courses/APR/public/ebnf.html#string-character ; Programs and Blocks program program-heading block "." program-heading program identifier "(" identifier-list ")" ";" block declaration-part statement-part declaration-part [ label-declaration-part ] [ constant-definition-part ] [ type-definition-part ] [ variable-declaration-part ] procedure-and-function-declaration-part label-declaration-part label label { "," label } ";" constant-definition-part const constant-definition ";" { constant-definition ";" } constant-definition identifier "=" constant type-definition-part type type-definition ";" { type-definition ";" } type-definition identifier "=" type variable-declaration-part var variable-declaration ";" { variable-declaration ";" } variable-declaration identifier-list ":" type procedure-and-function-declaration-part { (procedure-declaration | function-declaration) ";" } procedure-declaration procedure-heading ";" procedure-body | procedure-heading ";" directive | procedure-identification ";" procedure-body procedure-body block function-declaration function-heading ";" function-body | function-heading ";" directive | function-identification ";" function-body function-body block directive forward | compiler-defined-directives statement-part begin statement-sequence end ; Procedure and Function Definitions procedure-heading procedure identifier [ formal-parameter-list ] function-heading function identifier [ formal-parameter-list ] ":" result-type result-type type-identifier procedure-identification procedure procedure-identifier function-identification function function-identifier formal-parameter-list "(" formal-parameter-section { ";" formal-parameter-section } ")" formal-parameter-section value-parameter-section | variable-parameter-section | procedure-parameter-section | function-parameter-section value-parameter-section identifier-list ":" parameter-type variable-parameter-section var identifier-list ":" parameter-type procedure-parameter-section procedure-heading function-parameter-section function-heading parameter-type type-identifier | conformant-array-schema conformant-array-schema packed-conformant-array-schema | unpacked-conformant-array-schema packed-conformant-array-schema packed array "[ " bound-specification " ]" of type-idnetifier unpacked-conformant-array-schema array "[ " bound-specification { ";" bound-specification } " ]" of (type-identifier | conformant-array-schema) bound-specification identifier ".." identifier ":" ordinal-type-identifier ordinal-type-identifier type-identifier ; Statements statement-sequence statement { ";" statement } statement [ label ":" ] (simple-statement | structured-statement) simple-statement [ assignment-statement | procedure-statement | goto-statement ] assignment-statement (variable | function-identifier) ":=" expression procedure-statement procedure-identifier [ actual-parameter-list ] goto-statement goto label structured-statement compound-statement | repetitive-statement | conditional-statement | with-statement compound-statement begin statement-sequence end repetitive-statement while-statement | repeat-statement | for-statement while-statement while expression do statement repeat-statement repeat statement-sequence until expression for-statement for variable-identifier ":=" initial-expression (to | downto) final-expression do statement initial-expression expression final-expression expression conditional-statement if-statement | case-statement if-statement if expression then statement [ else statement ] case-statement case expression of case-limb { ";" case-limb } [ ";" ] end case-limb case-label-list ":" statement case-label-list constant { "," constant } with-statement with record-variable { "," record-variable } do statement actual-parameter-list "(" actual-parameter { "," actual-parameter } ")" actual-parameter actual-value | actual-variable | actual-procedure | actual-function actual-value expression actual-procedure procedure-identifier actual-function function-identifier ; Expressions expression simple-expression [ relational-operator simple-expression ] simple-expression [ sign ] term { addition-operator term } term factor { multiplication-operator factor } factor variable | number | string | set | nil | constant-identifier | bound-identifier | function-designator | "(" expression ")" | not factor relational-operator "=" | "<>" | "<" | "<=" | ">" | ">=" | "in" addition-operator "+" | "-" | or multiplication-operator "*" | "/" | div | mod | and variable entire-variable | component-variable | referenced-variable entire-variable variable-identifier | field-identifier component-variable indexed-variable | field-designator | file-buffer indexed-variable array-variable "[ " expression-list " ]" field-designator record-variable "." field-identifier set "[ " element-list " ]" element-list [ expression { "," expression } ] function-designator function-identifier [ actual-parameter-list ] file-buffer file-variable "^" ; Types type simple-type | structured-type | pointer-type | type-identifier simple-type subrange-type | enumerated-type enumerated-type "(" identifier-list ")" subrange-type lower-bound ".." upper-bound lower-bound constant upper-bound constant structured-type [ packed ] unpacked-structured-type unpacked-structured-type array-type | record-type | set-type | file-type array-type array "[ " index-type { "," index-type } " ]" of element-type index-type simple-type element-type type record-type record field-list end set-type set of base-type base-type type file-type file of file-component-type file-component-type type pointer-type "^" type-identifier ; Record Fields field-list [ (fixed-part [ ";" variant-part ] | variant-part) [ ";" ] ] fixed-part record-section { ";" record-section } record-section identifier-list ":" type variant-part case tag-field type-identifier of variant { ";" variant } tag-field [ identifier ":" ] variant case-label-list ":" "(" field-list ")" ; Input/Output output-list output-value { "," output-value } output-value expression [ ";" field-width [ ":" fraction-length ] ] field-width expression fraction-length expression ; Variable and Identifier Categories identifier letter { letter | digit } file-variable variable referenced-variable pointer-variable "^" record-variable variable pointer-variable variable actual-variable variable array-variable variable field-identifier identifier constant-identifier identifier variable-identifier identifier type-identifier identifier procedure-identifier identifier function-identifier identifier bound-identifier identifier ; Low Level Definitions variable-list variable { "," variable } identifier-list identifier { "," identifier } expression-list expression { "," expression } number integer-number | real-number integer-number digit-sequence real-number digit-sequence "." [ digit-sequence ] [ scale-factor ] | digit-sequence scale-factor scale-factor ("E" | "e") [ sign ] digit-sequence unsigned-digit-sequence digit { digit } digit-sequence [ sign ] unsigned-digit-sequence sign "+" | "-" letter "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" | "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" digit "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" string "'" string-character { string-character } "'" string-character any-character-except-quote | "''" label integer-number constant [ sign ] (constant-identifier | number) | string