/
Statements.sdf
54 lines (51 loc) · 4.17 KB
/
Statements.sdf
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
module languages/modula-3/syntax/Statements
imports languages/modula-3/syntax/Expressions
imports languages/modula-3/syntax/Types
exports
sorts AssignStmt Stmt Block CallStmt CaseStmt ExitStmt EvalStmt ForStmt IfStmt
LockStmt LoopStmt RaiseStmt RepeatStmt ReturnStmt TryFinStmt TryXptStmt
TCaseStmt WhileStmt WithStmt Stmts Case TCase Handler Label Actual
Binding
context-free syntax
AssignStmt -> Stmt
Block -> Stmt
CallStmt -> Stmt
CaseStmt -> Stmt
ExitStmt -> Stmt
EvalStmt -> Stmt
ForStmt -> Stmt
IfStmt -> Stmt
LockStmt -> Stmt
LoopStmt -> Stmt
RaiseStmt -> Stmt
RepeatStmt -> Stmt
ReturnStmt -> Stmt
TryFinStmt -> Stmt
TryXptStmt -> Stmt
TCaseStmt -> Stmt
WhileStmt -> Stmt
WithStmt -> Stmt
({Stmt ";"}+ ";"?)? -> Stmts
Expr ":=" Expr -> AssignStmt
Expr "(" {Actual ","}* ")" -> CallStmt
"CASE" Expr "OF" "|"? {Case "|"}+ ("ELSE" Stmts)? "END" -> CaseStmt
"EXIT" -> ExitStmt
"EVAL" Expr -> EvalStmt
"FOR" Id ":=" Expr "TO" Expr ("BY" Expr)? "DO" Stmts "END" -> ForStmt
"IF" Expr "THEN" Stmts ("ELSIF" Expr "THEN" Stmts)* ("ELSE" Stmts)? "END" -> IfStmt
"LOCK" Expr "DO" Stmts "END" -> LockStmt
"LOOP" Stmts "END" -> LoopStmt
"RAISE" QualId ("(" Expr ")")? -> RaiseStmt
"REPEAT" Stmts "UNTIL" Expr -> RepeatStmt
"RETURN" Expr? -> ReturnStmt
"TYPECASE" Expr "OF" "|"? {TCase "|"}+ ("ELSE" Stmts)? "END" -> TCaseStmt
"TRY" Stmts "EXCEPT" "|"? {Handler "|"}+ ("ELSE" Stmts)? "END" -> TryXptStmt
"TRY" Stmts "FINALLY" Stmts "END" -> TryFinStmt
"WHILE" Expr "DO" Stmts "END" -> WhileStmt
"WITH" {Binding ","}+ "DO" Stmts "END" -> WithStmt
{Label ","}+ "=>" Stmts -> Case
Expr (".." Expr)? -> Label
{QualId ","}+ ("(" Id ")")? "=>" Stmts -> Handler
{Type ","}+ ("(" Id ")")? "=>" Stmts -> TCase
Id "=" Expr -> Binding
TypeLiteral | ((Id ":=")? Expr) -> Actual