- •Acknowledgements
- •Introduction
- •Information technology --- Programming languages --- Pascal
- •1 Scope
- •2 Normative reference
- •3 Definitions
- •3.1 Error
- •4 Definitional conventions
- •5 Compliance
- •5.1 Processors
- •5.2 Programs
- •6 Requirements
- •6.1 Lexical tokens
- •6.1.1 General
- •6.1.2 Special-symbols
- •6.1.3 Identifiers
- •6.1.4 Directives
- •6.1.5 Numbers
- •6.1.6 Labels
- •6.1.7 Character-strings
- •6.1.8 Token separators
- •6.1.9 Lexical alternatives
- •6.2 Blocks, scopes, and activations
- •6.2.1 Blocks
- •6.2.2 Scopes
- •6.2.3 Activations
- •6.3 Constant-definitions
- •6.4 Type-definitions
- •6.4.1 General
- •6.4.2 Simple-types
- •6.4.2.1 General
- •6.4.2.2 Required simple-types
- •6.4.2.3 Enumerated-types
- •6.4.2.4 Subrange-types
- •6.4.3 Structured-types
- •6.4.3.1 General
- •6.4.3.2 Array-types
- •6.4.3.3 Record-types
- •6.4.3.5 File-types
- •6.4.4 Pointer-types
- •6.4.5 Compatible types
- •6.4.7 Example of a type-definition-part
- •6.5 Declarations and denotations of variables
- •6.5.1 Variable-declarations
- •6.5.2 Entire-variables
- •6.5.3 Component-variables
- •6.5.3.1 General
- •6.5.3.2 Indexed-variables
- •6.5.3.3 Field-designators
- •6.5.4 Identified-variables
- •6.5.5 Buffer-variables
- •6.6 Procedure and function declarations
- •6.6.1 Procedure-declarations
- •6.6.2 Function-declarations
- •6.6.3 Parameters
- •6.6.3.1 General
- •6.6.3.2 Value parameters
- •6.6.3.3 Variable parameters
- •6.6.3.4 Procedural parameters
- •6.6.3.5 Functional parameters
- •6.6.3.6 Parameter list congruity
- •6.6.3.7 Conformant array parameters
- •6.6.3.8 Conformability
- •6.6.5.3 Dynamic allocation procedures
- •6.6.5.4 Transfer procedures
- •6.6.6 Required functions
- •6.6.6.1 General
- •6.6.6.2 Arithmetic functions
- •6.6.6.3 Transfer functions
- •6.6.6.4 Ordinal functions
- •6.6.6.5 Boolean functions
- •6.7 Expressions
- •6.7.1 General
- •6.7.2 Operators
- •6.7.2.1 General
- •6.7.2.2 Arithmetic operators
- •6.7.2.3 Boolean operators
- •6.7.2.4 Set operators
- •6.7.2.5 Relational operators
- •6.7.3 Function-designators
- •6.8 Statements
- •6.8.1 General
- •6.8.2 Simple-statements
- •6.8.2.1 General
- •6.8.2.2 Assignment-statements
- •6.8.2.3 Procedure-statements
- •6.8.2.4 Goto-statements
- •6.8.3.5 Case-statements
- •6.8.3.6 Repetitive-statements
- •6.8.3.7 Repeat-statements
- •6.8.3.8 While-statements
- •6.8.3.10 With-statements
- •6.9 Input and output
- •6.9.1 The procedure read
- •6.9.2 The procedure readln
- •6.9.3 The procedure write
- •6.9.3.1 Write-parameters
- •6.9.3.2 Char-type
- •6.9.3.3 Integer-type
- •6.9.3.4 Real-type
- •6.9.3.5 Boolean-type
- •6.9.3.6 String-types
- •6.9.4 The procedure writeln
- •6.9.5 The procedure page
- •6.10 Programs
- •Annex a
- •Collected syntax
- •Annex b
- •Cross-references
- •Annex c
- •Required identifiers
- •Identifier Reference(s)
- •Annex d
- •Annex e
- •Implementation-defined features
- •Annex f
- •Implementation-dependent features
Annex a
(Informative)
Collected syntax
The nonterminal symbols pointer-type, program, signed-number, simple-type, special-symbol, and structured-type are only referenced by the semantics and are not used in the right-hand-side of any production. The nonterminal symbol program is the start symbol of the grammar.
6.7.3 actual-parameter = expression ½ variable-access ½ procedure-identifier ½ function-identifier .
6.7.3 actual-parameter-list = '(' actual-parameter { ',' actual-parameter } ')' .
6.7.2.1 adding-operator = '+' ½ ' ½ 'or' .
6.1.7apostrophe-immage = '''' .
6.4.3.2array-type = 'array' '[' index=type { ',' index-type } ']' 'of' component-type .
6.5.3.2array-variable = variable-access .
6.8.2.2 assignment-statement = ( variable-access ½ function-identifier ) ':=' expression .
6.4.3.4 base-type = ordinal-type .
6.2.1 block = label-declaration-part constant-definition-part type-definition-part
variable-declaration-part procedure-and-function-declaration-part
statement-part .
6.7.2.3 Boolean-expression = expression .
6.6.3.7.1 bound-identifier = identifier .
6.5.5 buffer-variable = file-variable '' .
6.4.3.3 case-constant = constant .
6.4.3.3 case-constant-list = case-constant { ',' case-constant } .
6.8.3.5 case-index = expression .
6.8.3.5 case-list-element = case-constant-list ':' statement .
6.8.3.5 case-statement = 'case' case-index 'of' case-list-element { ';' case-list-element } [ ';' ] 'end' .
6.1.7 character-string = ''' string-element { string-element } ''' .
6.4.3.2 component-type = type-denoter .
6.5.3.1 component-variable = indexed-variable ½ field-designator .
6.8.3.2 compound-statement = 'begin' statement-sequence 'end' .
6.8.3.3 conditional-statement = if-statement ½ case-statement .
6.6.3.7.1 conformant-array-parameter-specification = value-conformant-array-specification
½ variable-conformant-array-specification .
6.6.3.7.1 conformant-array-schema = packed-conformant-array-schema
½ unpacked-conformant-array-schema .
6.3 constant = [ sign ] ( unsigned-number ½ constant-identifier ) ½ character-string .
6.3 constant-definition = identifier '=' constant .
6.2.1 constant-definition-part = [ 'const' constant-definition ';' { constant-definition ';' } ] .
6.3 constant-identifier = identifier .
6.8.3.9 control-variable = entire-variable .
6.1.1 digit = '0' ½ '1' ½ '2' ½ '3' ½ '4' ½ '5' ½ '6' ½ '7' ½ '8' ½ '9' .
6.1.5 digit-sequence = digit { digit } .
6.1.4 directive = letter { letter ½ digit } .
6.4.4 domain-type = type-identifier .
6.8.3.4 else-part = 'else' statement .
6.8.2.1 empty-statement = .
6.5.2 entire-variable = variable-identifier .
6.4.2.3 enumerated-type = '(' identifier-list ')' .
6.7.1 expression = simple-expression [ relational-operator simple-expression ] .
6.6.3.7.1 factor > bound-identifier .
6.7.1 factor > variable-access ½ unsigned-constant ½ function-designator ½ set-constructor
½ '(' expression ')' ½ 'not' factor .
6.5.3.3 field-designator = record-variable '.' field-specifier ½ field-designator-identifier .
6.8.3.10 field-designator-identifier = identifier .
6.5.3.3 field-identifier = identifier .
6.4.3.3 field-list = [ ( fixed-part [ ';' variant-part ] ½ variant-part ) [ ';' ] ] .
6.5.3.3 field-specifier = field-identifier .
6.4.3.5 file-type = 'file' 'of' component-type .
6.5.5 file-variable = variable-access .
6.8.3.9 final-value = expression .
6.4.3.3 fixed-part = record-section { ';' record-section } .
6.8.3.9 for-statement = 'for' control-variable ':=' initial-value ( 'to' ½ 'downto' ) final-value 'do' statement .
6.6.3.1 formal-parameter-list = '(' formal-parameter-section { ';' formal-parameter-section } ')' .
6.6.3.1 formal-parameter-section > value-parameter-specification ½ variable-parameter-specification
½ procedural-parameter-specification ½ functional-parameter-specification .
6.6.3.7.1 formal-parameter-section > conformant-array-parameter-specification .
6.1.5 fractional-part = digit-sequence .
6.6.2 function-block = block .
6.6.2 function-declaration = function-heading ';' directive
½ function-identification ';' function-block
½ function-heading ';' function-block .
6.7.3 function-designator = function-identifier [ actual-parameter-list ] .
6.6.2 function-heading = 'function' identifier [ formal-parameter-list ] ':' result-type .
6.6.2 function-identification = 'function' function-identifier .
6.6.2 function-identifier = identifier .
6.6.3.1 functional-parameter-specification = function-heading .
6.8.2.4 goto-statement = 'goto' label .
6.5.4 identified-variable = pointer-variable '' .
6.1.3 identifier = letter { letter ½ digit } .
6.4.2.3 identifier-list = identifier { ',' identifier } .
6.8.3.4 if-statement = 'if' Boolean-expression 'then' statement [ else-part ] .
6.5.3.2 index-expression = expression .
6.4.3.2 index-type = ordinal-type .
6.6.3.7.1 index-type-specification = identifier '..' identifier ':' ordinal-type-identifier .
6.5.3.2 indexed-variable = array-variable '[' index-expression { ',' index-expression } ']' .
6.8.3.9 initial-value = expression .
6.1.6 label = digit-sequence .
6.2.1 label-declaration-part = [ 'label' label { ',' label } ';' ] .
6.1.1 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' .
6.7.1 member-designator = expression [ '..' expression ] .
6.7.2.1 multiplying-operator = '*' ½ '/' ½ 'div' ½ 'mod' ½ 'and' .
6.4.2.1 new-ordinal-type = enumerated-type ½ subrange-type .
6.4.4 new-pointer-type = '' domain-type .
6.4.3.1 new-structured-type = [ 'packed' ] unpacked-structured-type .
6.4.1 new-type = new-ordinal-type ½ new-structured-type ½ new-pointer-type .
6.4.2.1 ordinal-type = new-ordinal-type ½ ordinal-type-identifier .
6.4.2.1 ordinal-type-identifier = type-identifier .
6.6.3.7.1 packed-conformant-array-schema = 'packed' 'array' '[' index-type-specification ']' 'of' type-identifier .
6.4.4 pointer-type = new-pointer-type ½ pointer-type-identifier .
6.4.1 pointer-type-identifier = type-identifier .
6.5.4 pointer-variable = variable-access .
6.6.3.1 procedural-parameter-specification = procedure-heading .
6.2.1 procedure-and-function-declaration-part = { ( procedure-declaration ½ function-declaration ) ';' } .
6.6.1 procedure-block = block .
6.6.1 procedure-declaration = procedure-heading ';' directive
½ procedure-identification ';' procedure-block
½ procedure-heading ';' procedure-block .
6.6.1 procedure-heading = 'procedure' identifier [ formal-parameter-list ] .
6.6.1 procedure-identification = 'procedure' procedure-identifier .
6.6.1 procedure-identifier = identifier .
6.8.2.3 procedure-statement = procedure-identifier ( [ actual-parameter-list ]
½ read-parameter-list ½ readln-parameter-list
½ write-parameter-list ½ writeln-parameter-list ) .
6.10 program = program-heading ';' program-block '.' .
6.10 program-block = block .
6.10 program-heading = 'program' identifier [ '(' program-parameter-list ')' ] .
6.10 program-parameter-list = identifier-list .
6.9.1 read-parameter-list = '(' [ file-variable ',' ] variable-access { ',' variable-access } ')' .
6.9.2 readln-parameter-list = [ '(' ( file-variable ½ variable-access ) { ',' variable-access } ')' ] .
6.4.2.1 real-type-identifier = type-identifier .
6.4.3.3 record-section = identifier-list ':' type-denoter .
6.4.3.3 record-type = 'record' field-list 'end' .
6.5.3.3 record-variable = variable-access .
6.8.3.10 record-variable-list = record-variable { ',' record-variable } .
6.7.2.1 relational-operator = '=' ½ '<>' ½ '<' ½ '>' ½ '<=' ½ '>=' ½ 'in' .
6.8.3.7 repeat-statement = 'repeat' statement-sequence 'until' Boolean-expression .
6.8.3.6 repetitive-statement = repeat-statement ½ while-statement ½ for-statement .
6.6.2 result-type = simple-type-identifier ½ pointer-type-identifier .
6.1.5 scale-factor = [ sign ] digit-sequence .
6.7.1 set-constructor = '[' [ member-designator { ',' member-designator } ] ']' .
6.4.3.4 set-type = 'set' 'of' base-type .
6.1.5 sign = '+' ½ ' -' .
6.1.5signed-integer = [ sign ] unsigned-integer .
6.1.5signed-number = signed-integer ½ signed-real .
6.1.5signed-real = [ sign ] unsigned-real .
6.7.1simple-expression = [ sign ] term { adding-operator term } .
6.8.2.1simple-statement = empty-statement ½ assignment-statement ½ procedure-statement ½ goto-statement .
6.4.2.1 simple-type = ordinal-type ½ real-type-identifier .
6.4.1 simple-type-identifier = type-identifier .
6.1.2 special-symbol = '+' ½ ' -' ½ '*' ½ '/' ½ '=' ½ '<' ½ '>' ½ '[' ½ ']' ½ '.' ½ ',' ½ ':' ½ ';' ½ ''
½ '(' ½ ')' ½ '<>' ½ '<=' ½ '>=' ½ ':=' ½ '..' ½ word-symbol .
6.8.1 statement = [ label ':' ] ( simple-statement ½ structured-statement ) .
6.2.1 statement-part = compound-statement .
6.8.3.1 statement-sequence = statement { ';' statement } .
6.1.7 string-character = one-of-a-set-of-implementation-defined-characters .
6.1.7 string-element = apostrophe-image ½ string-character .
6.8.3.1 structured-statement = compound-statement ½ conditional-statement
½ repetitive-statement ½ with-statement .
6.4.3.1 structured-type = new-structured-type ½ structured-type-identifier .
6.4.1 structured-type-identifier = type-identifier .
6.4.2.4 subrange-type = constant '..' constant .
6.4.3.3 tag-field = identifier .
6.4.3.3 tag-type = ordinal-type-identifier .
6.7.1 term = factor { multiplying-operator factor } .
6.4.1 type-definition = identifier '=' type-denoter .
6.2.1 type-definition-part = [ 'type' type-definition ';' { type-definition ';' } ] .
6.4.1 type-denoter = type-identifier ½ new-type .
6.4.1 type-identifier = identifier .
6.6.3.7.1 unpacked-conformant-array-schema =
'array' '[' index-type-specification { ';' index-type-specification } ']'
'of' ( type-identifier ½ conformant-array-schema ) .
6.4.3.1 unpacked-structured-type = array-type ½ record-type ½ set-type ½ file-type .
6.7.1 unsigned-constant = unsigned-number ½ character-string ½ constant-identifier ½ 'nil' .
6.1.5 unsigned-integer = digit-sequence .
6.1.5 unsigned-number = unsigned-integer ½ unsigned-real .
6.1.5 unsigned-real = digit-sequence '.' fractional-part [ 'e' scale-factor ] ½ digit-sequence 'e' scale-factor .
6.6.3.7.1 value-conformant-array-specification = identifier-list ':' conformant-array-schema .
6.6.3.1 value-parameter-specification = identifier-list ':' type-identifier .
6.5.1 variable-access = entire-variable ½ component-variable ½ identified-variable ½ buffer-variable .
6.6.3.7.1 variable-conformant-array-specification = 'var' identifier-list ':' conformant-array-schema .
6.5.1 variable-declaration = identifier-list ':' type-denoter .
6.2.1 variable-declaration-part = [ 'var' variable-declaration ';' { variable-declaration ';' } ] .
6.5.2 variable-identifier = identifier .
6.6.3.1 variable-parameter-specification = 'var' identifier-list ':' type-identifier .
6.4.3.3 variant = case-constant-list ':' '(' field-list ')' .
6.4.3.3 variant-part = 'case' variant-selector 'of' variant { ';' variant } .
6.4.3.3 variant-selector = [ tag-field ':' ] tag-type .
6.8.3.8 while-statement = 'while' Boolean-expression 'do' statement .
6.8.3.10 with-statement = 'with' record-variable-list 'do' statement .
6.1.2 word-symbol = 'and' ½ 'array' ½ 'begin' ½ 'case' ½ 'const' ½ 'div' ½ 'do' ½ 'downto' ½ 'else'
½ 'end' ½ 'file' ½ 'for' ½ 'function' ½ 'goto' ½ 'if' ½ 'in' ½ 'label' ½ 'mod'
½ 'nil' ½ 'not' ½ 'of' ½ 'or' ½ 'packed' ½ 'procedure' ½ 'program' ½ 'record'
½ 'repeat' ½ 'set' ½ 'then' ½ 'to' ½ 'type' ½ 'until' ½ 'var' ½ 'while' ½ 'with' .
6.9.3 write-parameter = expression [ ':' expression [ ':' expression ] ] .
6.9.3 write-parameter-list = '(' [ file-variable ',' ] write-parameter { ',' write-parameter } ')' .
6.9.4 writeln-parameter-list = [ '(' ( file-variable ½ write-parameter ) { ',' write-parameter } ')' ] .
ISO/IEC 7185:1990(E)