-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOberonSyntax.Text.txt
72 lines (72 loc) · 3.49 KB
/
OberonSyntax.Text.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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].