123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269 |
- .sp 1.5i
- .LP
- .vs 14
- .nh
- .ft B
- Appendix A: ISO-PASCAL grammar
- .ft R
- \fBA.1 Lexical tokens\fR
- The syntax describes the formation of lexical tokens from characters and the
- separation of these tokens, and therefore does not adhere to the same rules
- as the syntax in A.2.
- The lexical tokens used to construct Pascal programs shall be classified into
- special-symbols, identifiers, directives, unsigned-numbers, labels and
- character-strings. The representation of any letter (upper-case or lower-case,
- differences of font, etc) occurring anywhere outside of a character-string
- shall be insignificant in that occurrence to the meaning of the program.
- letter = \fBa\fR | \fBb\fR | \fBc\fR | \fBd\fR | \fBe\fR | \fBf\fR | \fBg\fR | \fBh\fR | \fBi\fR | \fBj\fR | \fBk\fR | \fBl\fR | \fBm\fR | \fBn\fR | \fBo\fR | \fBp\fR | \fBq\fR | \fBr\fR | \fBs\fR | \fBt\fR | \fBu\fR | \fBv\fR | \fBw\fR | \fBx\fR | \fBy\fR | \fBz\fR .
- digit = \fB0\fR | \fB1\fR | \fB2\fR | \fB3\fR | \fB4\fR | \fB5\fR | \fB6\fR | \fB7\fR | \fB8\fR | \fB9\fR .
- The special symbols are tokens having special meanings and shall be used to
- delimit the syntactic units of the language.
- special-symbol = \fB+\fR | \fB\-\fR | \fB*\fR | \fB/\fR | \fB=\fR | \fB<\fR | \fB>\fR | \fB[\fR | \fB]\fR | \fB.\fR | \fB,\fR | \fB:\fR | \fB;\fR | \fB^\fR | \fB(\fR | \fB)\fR | \fB<>\fR | \fB<=\fR | \fB>=\fR | \fB:=\fR | \fB..\fR |
- \h'\w'special-symbol = 'u'word-symbol .
- word-symbol = \fBand\fR | \fBarray\fR | \fBbegin\fR | \fBcase\fR | \fBconst\fR | \fBdiv\fR | \fBdo\fR | \fBdownto\fR | \fBelse\fR | \fBend\fR | \fBfile\fR | \fBfor\fR | \fBfunction\fR |
- \h'\w'word-symbol = 'u'\fBgoto\fR | \fBif\fR | \fBin\fR | \fBlabel\fR | \fBmod\fR | \fBnil\fR | \fBnot\fR | \fBof\fR | \fBor\fR | \fBpacked\fR | \fBprocedure\fR | \fBprogram\fR | \fBrecord\fR |
- \h'\w'word-symbol = 'u'\fBrepeat\fR | \fBset\fR | \fBthen\fR | \fBto\fR | \fBtype\fR | \fBuntil\fR | \fBvar\fR | \fBwhile\fR | \fBwith\fR .
- Identifiers may be of any length. All characters of an identifier shall be
- significant. No identifier shall have the same spelling as any word-symbol.
- identifier = letter { letter | digit } .
- A directive shall only occur in a procedure-declaration or function-declaration.
- No directive shall have the same spelling as any word-symbol.
- directive = letter {letter | digit} .
- Numbers are given in decimal notation.
- .nf
- unsigned-integer = digit-sequence .
- unsigned-real = unsigned-integer \fB.\fR fractional-part [ \fBe\fR scale-factor ] | unsigned-integer \fBe\fR scale-factor .
- digit-sequence = digit {digit} .
- fractional-part = digit-sequence .
- scale-factor = signed-integer .
- signed-integer = [sign] unsigned-integer .
- sign = \fB+\fR | \fB\-\fR .
- .fi
- .bp
- Labels shall be digit-sequences and shall be distinguished by their apparent
- integral values and shall be in the closed interval 0 to 9999.
- label = digit-sequence .
- A character-string containing a single string-element shall denote a value of
- the required char-type. Each string-character shall denote an implementation-
- defined value of the required char-type.
- .nf
- character-string = \fB'\fR string-element { string-element } \fB'\fR .
- string-element = apostrophe-image | string-character .
- apostrophe-image = \fB''\fR .
- string-character = All 7-bits ASCII characters except linefeed (10), vertical tab (11), and new page (12).
- .fi
- The construct:
- \fB{\fR any-sequence-of-characters-and-separations-of-lines- not-containing-right-brace \fB}\fR
- shall be a comment if the "{" does not occur within a character-string or
- within a comment. The substitution of a space for a comment shall not alter
- the meaning of a program.
- Comments, spaces (except in character-strings), and the separation of
- consecutive lines shall be considered to be token separators. Zero or more
- token separators may occur between any two consecutive tokens, or before
- the first token of a program text. No separators shall occur within tokens.
- .bp
- .po
- \fBA.2 Grammar\fR
- The non-terminal symbol \fIprogram\fR is the start symbol of the grammar.
- .nf
- actual-parameter : expression | variable-access | procedure-identifier | function-identifier .
- actual-parameter-list : \fB(\fR actual-parameter { \fB,\fR actual-parameter } \fB)\fR .
- adding-operator : \fB+\fR | \fB\-\fR | \fBor\fR .
- array-type : \fBarray\fR \fB[\fR index-type { \fB,\fR index-type } \fB]\fR \fBof\fR component-type .
- array-variable : variable-access .
- assignment-statement : ( variable-access | function-identifier ) \fB:=\fR expression .
- base-type : ordinal-type .
- block : label-declaration-part constant-definition-part type-definition-part variable-declaration-part
- \h'\w'block : 'u'procedure-and-function-declaration-part statement-part .
- Boolean-expression : expression .
- bound-identifier : identifier .
- buffer-variable : file-variable \fB^\fR .
- case-constant : constant .
- case-constant-list : case-constant { \fB,\fR case-constant } .
- case-index : expression .
- case-list-element : case-constant-list \fB:\fR statement .
- case-statement : \fBcase\fR case-index \fBof\fR case-list-element { \fB;\fR case-list-element } [ \fB;\fR ] \fBend\fR .
- component-type : type-denoter .
- component-variable : indexed-variable | field-designator .
- compound-statement : \fBbegin\fR statement-sequence \fBend\fR .
- conditional-statement : if-statement | case-statement .
- conformant-array-parameter-specification : value-conformant-array-specification |
- \h'+18.5m'variable-conformant-array-specification .
- conformant-array-schema : packed-conformant-array-schema | unpacked-conformant-array-schema .
- constant : [ sign ] ( unsigned-number | constant-identifier ) | character-string .
- constant-definition : identifier \fB=\fR constant .
- constant-definition-part : [ \fBconst\fR constant-definition \fB;\fR { constant-definition \fB;\fR } ] .
- constant-identifier : identifier .
- control-variable : entire-variable .
- domain-type : type-identifier .
- else-part : \fBelse\fR statement .
- empty-statement : .
- entire-variable : variable-identifier .
- enumerated-type : \fB(\fR identifier-list \fB)\fR .
- expression : simple-expression [ relational-operator simple-expression ] .
- .bp
- .po
- factor : variable-access | unsigned-constant | bound-identifier | function-designator | set-constructor |
- \h'\w'factor : 'u'\fB(\fR expression \fB)\fR | \fBnot\fR factor .
- field-designator : record-variable \fB.\fR field-specifier | field-designator-identifier .
- field-designator-identifier : identifier .
- field-identifier : identifier .
- field-list : [ ( fixed-part [ \fB;\fR variant-part ] | variant-part ) [ \fB;\fR ] ] .
- field-specifier : field-identifier .
- file-type : \fBfile\fR \fBof\fR component-type .
- file-variable : variable-access .
- final-value : expression .
- fixed-part : record-section { \fB;\fR record-section } .
- for-statement : \fBfor\fR control-variable \fB:=\fR initial-value ( \fBto\fR | \fBdownto\fR ) final-value \fBdo\fR statement .
- formal-parameter-list : \fB(\fR formal-parameter-section { \fB;\fR formal-parameter-section } \fB)\fR .
- formal-parameter-section : value-parameter-specification | variable-parameter-specification |
- \h'\w'formal-parameter-section : 'u'procedural-parameter-specification | functional-parameter-specification |
- \h'\w'formal-parameter-section : 'u'conformant-array-parameter-specification .
- function-block : block .
- function-declaration : function-heading \fB;\fR directive | function-identification \fB;\fR function-block |
- \h'\w'function-declaration : 'u'function-heading \fB;\fR function-block .
- function-designator : function-identifier [ actual-parameter-list ] .
- function-heading : \fBfunction\fR identifier [ formal-parameter-list ] \fB:\fR result-type .
- function-identification : \fBfunction\fR function-identifier .
- function-identifier : identifier .
- functional-parameter-specification : function-heading .
- goto-statement : \fBgoto\fR label .
- identified-variable : pointer-variable \fB^\fR .
- identifier-list : identifier { \fB,\fR identifier } .
- if-statement : \fBif\fR Boolean-expression \fBthen\fR statement [ else-part ] .
- index-expression : expression .
- index-type : ordinal-type .
- index-type-specification : identifier \fB..\fR identifier \fB:\fR ordinal-type-identifier .
- indexed-variable : array-variable \fB[\fR index-expression { \fB,\fR index-expression } \fB]\fR .
- initial-value : expression .
- label : digit-sequence .
- label-declaration-part : [ \fBlabel\fR label { \fB,\fR label } \fB;\fR ] .
- member-designator : expression [ \fB..\fR expression ] .
- multiplying-operator : \fB*\fR | \fB/\fR | \fBdiv\fR | \fBmod\fR | \fBand\fR .
- .bp
- .po
- new-ordinal-type : enumerated-type | subrange-type .
- new-pointer-type : \fB^\fR domain-type .
- new-structured-type : [ \fBpacked\fR ] unpacked-structured-type .
- new-type : new-ordinal-type | new-structured-type | new-pointer-type .
- ordinal-type : new-ordinal-type | ordinal-type-identifier .
- ordinal-type-identifier : type-identifier .
- packed-conformant-array-schema : \fBpacked\fR \fBarray\fR \fB[\fR index-type-specification \fB]\fR \fBof\fR type-identifier .
- pointer-type-identifier : type-identifier .
- pointer-variable : variable-access .
- procedural-parameter-specification : procedure-heading .
- procedure-and-function-declaration-part : { ( procedure-declaration | function-declaration ) \fB;\fR } .
- procedure-block : block .
- procedure-declaration : procedure-heading \fB;\fR directive | procedure-identification \fB;\fR procedure-block |
- \h'\w'procedure-declaration : 'u'procedure-heading \fB;\fR procedure-block .
- procedure-heading : \fBprocedure\fR identifier [ formal-parameter-list ] .
- procedure-identification : \fBprocedure \fR procedure-identifier .
- procedure-identifier : identifier .
- procedure-statement : procedure-identifier ( [ actual-parameter-list ] | read-parameter-list | readln-parameter-list |
- \h'\w'procedure-statement : procedure-identifier ( ['u'write-parameter-list | writeln-parameter-list ) .
- program : program-heading \fB;\fR program-block \fB.\fR .
- program-block : block .
- program-heading : \fBprogram\fR identifier [ \fB(\fR program-parameters \fB)\fR ] .
- program-parameters : identifier-list .
- read-parameter-list : \fB(\fR [ file-variable \fB,\fR ] variable-access { \fB,\fR variable-access } \fB)\fR .
- readln-parameter-list : [ \fB(\fR ( file-variable | variable-access ) { \fB,\fR variable-access } \fB)\fR ] .
- record-section : identifier-list \fB:\fR type-denoter .
- record-type : \fBrecord\fR field-list \fBend\fR .
- record-variable : variable-access .
- record-variable-list : record-variable { \fB,\fR record-variable } .
- relational-operator : \fB=\fR | \fB<>\fR | \fB<\fR | \fB>\fR | \fB<=\fR | \fB>=\fR | \fBin\fR .
- repeat-statement : \fBrepeat\fR statement-sequence \fBuntil\fR Boolean-expression .
- repetitive-statement : repeat-statement | while-statement | for-statement .
- result-type : simple-type-identifier | pointer-type-identifier .
- set-constructor : \fB[\fR [ member-designator { \fB,\fR member-designator } ] \fB]\fR .
- set-type : \fBset\fR \fBof\fR base-type .
- sign : \fB+\fR | \fB\-\fR .
- simple-expression : [ sign ] term { adding-operator term } .
- simple-statement : empty-statement | assignment-statement | procedure-statement | goto-statement .
- simple-type-identifier : type-identifier .
- .bp
- .po
- statement : [ label \fB:\fR ] ( simple-statement | structured-statement ) .
- statement-part : compound-statement .
- statement-sequence : statement { \fB;\fR statement } .
- structured-statement : compound-statement | conditional-statement | repetitive-statement | with-statement .
- subrange-type : constant \fB..\fR constant .
- tag-field : identifier .
- tag-type : ordinal-type-identifier .
- term : factor { multiplying-operator factor } .
- type-definition : identifier \fB=\fR type-denoter .
- type-definition-part : [ \fBtype\fR type-definition \fB;\fR { type-definition \fB;\fR } ] .
- type-denoter : type-identifier | new-type .
- type-identifier : identifier .
- unpacked-conformant-array-schema : \fBarray\fR \fB[\fR index-type-specification { \fB;\fR index-type-specification } \fB]\fR \fBof\fR
- \h'\w'unpacked-conformant-array-schema : 'u'( type-identifier | conformant-array-schema ) .
- unpacked-structured-type : array-type | record-type | set-type | file-type .
- unsigned-constant : unsigned-number | character-string | constant-identifier | \fBnil\fR .
- unsigned-number : unsigned-integer | unsigned-real .
- value-conformant-array-specification : identifier-list \fB:\fR conformant-array-schema .
- value-parameter-specification : identifier-list \fB:\fR type-identifier .
- variable-access : entire-variable | component-variable | identified-variable | buffer-variable .
- variable-conformant-array-specification : \fBvar\fR identifier-list \fB:\fR conformant-array-schema .
- variable-declaration : identifier-list \fB:\fR type-denoter .
- variable-declaration-part : [ \fBvar\fR variable-declaration \fB;\fR { variable-declaration \fB;\fR } ] .
- variable-identifier : identifier .
- variable-parameter-specification : \fBvar\fR identifier-list \fB:\fR type-identifier .
- variant : case-constant-list \fB:\fR \fB(\fR field-list \fB)\fR .
- variant-part : \fBcase\fR variant-selector \fBof\fR variant { \fB;\fR variant } .
- variant-selector : [ tag-field \fB:\fR ] tag-type .
- while-statement : \fBwhile\fR Boolean-expression \fBdo\fR statement .
- with-statement : \fBwith\fR record-variable-list \fBdo\fR statement .
- write-parameter : expression [ \fB:\fR expression [ \fB:\fR expression ] ] .
- write-parameter-list : \fB(\fR [ file-variable \fB,\fR ] write-parameter { \fB,\fR write-parameter } \fB)\fR .
- writeln-parameter-list : [ \fB(\fR ( file-variable | write-parameter ) { \fB,\fR write-parameter } \fB)\fR ] .
- .fi
- .vs
- .bp
- .po
|