Mercurial > projects > dil
annotate trunk/src/dil/semantic/Interpreter.d @ 798:c24be8d4f6ab
Added documentation comments.
author | Aziz K?ksal <aziz.koeksal@gmail.com> |
---|---|
date | Sat, 01 Mar 2008 02:53:06 +0100 |
parents | 5fe89bb8cbdd |
children |
rev | line source |
---|---|
687
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
1 /++ |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
2 Author: Aziz Köksal |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
3 License: GPL3 |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
4 +/ |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
5 module dil.semantic.Interpreter; |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
6 |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
7 import dil.ast.Visitor; |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
8 import dil.ast.Node, |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
9 dil.ast.Declarations, |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
10 dil.ast.Expressions, |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
11 dil.ast.Statements, |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
12 dil.ast.Types, |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
13 dil.ast.Parameters; |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
14 |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
15 import dil.semantic.Symbol, |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
16 dil.semantic.Symbols, |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
17 dil.semantic.Scope, |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
18 dil.semantic.Types; |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
19 import dil.Information; |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
20 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
21 /// Used for compile-time evaluation of expressions. |
687
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
22 class Interpreter : Visitor |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
23 { |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
24 // Scope scop; |
687
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
25 InfoManager infoMan; |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
26 |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
27 static class Result : Expression |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
28 { |
791
5fe89bb8cbdd
Implemented syntax tree copying.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
754
diff
changeset
|
29 override Result copy(){return null;} |
687
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
30 } |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
31 |
693
56100b270897
Renamed a constant in class Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
691
diff
changeset
|
32 static const Result NAR; /// Not a Result. Similar to NAN in floating point arithmetics. |
687
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
33 |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
34 static this() |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
35 { |
693
56100b270897
Renamed a constant in class Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
691
diff
changeset
|
36 NAR = new Result; |
56100b270897
Renamed a constant in class Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
691
diff
changeset
|
37 NAR.type = Types.Error; |
687
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
38 } |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
39 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
40 /// Evaluates the expression e. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
41 /// Returns: NAR or a value. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
42 static Expression interpret(Expression e, InfoManager infoMan/+, Scope scop+/) |
687
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
43 { |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
44 return (new Interpreter(/+scop,+/ infoMan)).eval(e); |
691
276e2866f5fd
Added static interpret() method to Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
687
diff
changeset
|
45 } |
276e2866f5fd
Added static interpret() method to Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
687
diff
changeset
|
46 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
47 /// Constructs an Interpreter object. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
48 this(/+Scope scop, +/InfoManager infoMan) |
691
276e2866f5fd
Added static interpret() method to Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
687
diff
changeset
|
49 { |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
50 // this.scop = scop; |
687
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
51 this.infoMan = infoMan; |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
52 } |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
53 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
54 /// Start evaluation. |
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
55 Expression eval(Expression e) |
687
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
56 { |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
57 return e; |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
58 } |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
59 |
798
c24be8d4f6ab
Added documentation comments.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
791
diff
changeset
|
60 /// Returns true if e is immutable. |
687
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
61 bool isImmutable(Expression e) |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
62 { |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
63 switch (e.kind) |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
64 { |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
65 alias NodeKind NK; |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
66 case NK.IntExpression, NK.RealExpression, |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
67 NK.ComplexExpression, NK.CharExpression, |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
68 NK.BoolExpression, NK.StringExpression: |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
69 return true; |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
70 default: |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
71 } |
754
c7a5499faa77
Improved DDoc related code.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
693
diff
changeset
|
72 return false; |
687
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
73 } |
f14cd41fc87d
Added new module dil.semantic.Interpreter.
Aziz K?ksal <aziz.koeksal@gmail.com>
parents:
diff
changeset
|
74 } |