123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- digit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9".
- hexDigit = digit | "A" | "B" | "C" | "D" | "E" | "F".
- ident = letter {letter | digit}.
- qualident = [ident "."] ident.
- identdef = ident ["*"].
- integer = digit {digit} | digit {hexDigit} "H".
- real = digit {digit} "." {digit} [ScaleFactor].
- ScaleFactor = ("E" |"D") ["+" | "-"] digit {digit}.
- number = integer | real.
- string = "'" {character} "'" | digit {hexdigit} "X".
- ConstDeclaration = identdef "=" ConstExpression.
- ConstExpression = expression.
- TypeDeclaration = identdef "=" StrucType.
- StrucType = ArrayType | RecordType | PointerType | ProcedureType.
- type = qualident | StrucType.
- ArrayType = "ARRAY" length {"," length} "OF" type.
- length = ConstExpression.
- RecordType = "RECORD" ["(" BaseType ")"] [FieldListSequence] "END".
- BaseType = qualident.
- FieldListSequence = FieldList {";" FieldList}.
- FieldList = IdentList ":" type.
- IdentList = identdef {"," identdef}.
- PointerType = "POINTER" "TO" type.
- ProcedureType = "PROCEDURE" [FormalParameters].
- VariableDeclaration = IdentList ":" type.
- expression = SimpleExpression [relation SimpleExpression].
- relation = "=" | "#" | "<" | "<=" | ">" | ">=" | "IN" | "IS".
- SimpleExpression = ["+" | "-"] term {AddOperator term}.
- AddOperator = "+" | "-" | "OR".
- term = factor {MulOperator factor}.
- MulOperator = "*" | "/" | "DIV" | "MOD" | "&".
- factor = number | string | "NIL" | "TRUE" | "FALSE" |
- set | designator [ActualParameters] | "(" expression ")" | "~" factor.
- designator = qualident {selector}.
- selector = "." ident | "[" ExpList "]" | "^" | "(" qualident ")".
- set = "{" [element {"," element}] "}".
- element = expression [".." expression].
- ExpList = expression {"," expression}.
- ActualParameters = "(" [ExpList] ")" .
- statement = [assignment | ProcedureCall | IfStatement | CaseStatement |
- WhileStatement | RepeatStatement | ForStatement].
- assignment = designator ":=" expression.
- ProcedureCall = designator [ActualParameters].
- StatementSequence = statement {";" statement}.
- IfStatement = "IF" expression "THEN" StatementSequence
- {"ELSIF" expression "THEN" StatementSequence}
- ["ELSE" StatementSequence] "END".
- CaseStatement = "CASE" expression "OF" case {"|" case} "END".
- Case = CaseLabelList ":" StatementSequence.
- CaseLabelList = LabelRange {"," LabelRange}.
- LabelRange = label [".." label].
- label = integer | string | ident.
- WhileStatement = "WHILE" expression "DO" StatementSequence
- {"ELSIF" expression "DO" StatementSequence} "END".
- RepeatStatement = "REPEAT" StatementSequence "UNTIL" expression.
- ForStatement = "FOR" ident ":=" expression "TO" expression ["BY" ConstExpression]
- "DO" StatementSequence "END".
- ProcedureDeclaration = ProcedureHeading ";" ProcedureBody ident.
- ProcedureHeading = "PROCEDURE" identdef [FormalParameters].
- ProcedureBody = DeclarationSequence ["BEGIN" StatementSequence]
- ["RETURN" expression] "END".
- DeclarationSequence = ["CONST" {ConstDeclaration ";"}]
- ["TYPE" {TypeDeclaration ";"}]
- ["VAR" {VariableDeclaration ";"}]
- {ProcedureDeclaration ";"}.
- FormalParameters = "(" [FPSection {";" FPSection}] ")" [":" qualident].
- FPSection = ["CONST" | "VAR"] ident {"," ident} ":" FormalType.
- FormalType = ["ARRAY" "OF"] qualident.
- module = "MODULE" ident ";" [ImportList] DeclarationSequence
- ["BEGIN" StatementSequence] "END" ident "." .
- ImportList = "IMPORT" import {"," import} ";".
- import = ident [":=" ident].
|