added practicum files, updated gitignore
[fp1415.git] / files / practicum / RefactorX.icl
1 implementation module RefactorX
2
3 import StdEnv
4
5 Start = map toString [E1,E2,E3,E4,E5]
6
7 E1 = (let x = 42 - 3 in x / 0) + (let y = 6 in y * y)
8 E2 = let x = 42 in x + (let x = 58 in x)
9 E3 = let x = 1 in let y = 2 in let x = 3 in 4
10 E4 = let x = 1 in x + y
11 E5 = (let x = 1 in x) * x
12
13 :: Expr = NR Int
14 | VAR Name
15 | OP Expr Operator Expr
16 | LET Name Expr Expr
17 :: Name :== String
18 :: Operator = PLUS | MIN | MUL | DIV
19 :: Val = Result Int | Undef
20
21 // expressies afdrukken:
22 instance toString Expr where
23 toString ...
24
25 // vrije variabelen:
26 free :: Expr -> [Name]
27
28 // verwijder deelexpressies met ongebruikte let-variabelen:
29 remove_unused_lets :: Expr -> Expr
30
31 // evaluator met tabel van naam-waarde paren:
32 eval :: Expr -> Val