-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCalismaOrtami.java
More file actions
102 lines (80 loc) · 3.34 KB
/
CalismaOrtami.java
File metadata and controls
102 lines (80 loc) · 3.34 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import java.util.*;
import org.antlr.runtime.tree.*;
class CalismaOrtami {
protected CalismaOrtami ustOrtam;
protected Map degiskenler = new HashMap(); // Map<String, Deger>
protected FonksiyonOrtami fonksiyonOrtami;
protected CalismaOrtami() {}
public CalismaOrtami(CalismaOrtami ustOrtam) {
if (ustOrtam == null) {
throw new IllegalArgumentException(
"ustOrtam null olamaz. Sanirim bir FonksiyonOrtami nesnesine ihtiyaciniz var.");
}
this.ustOrtam = ustOrtam;
this.fonksiyonOrtami = ustOrtam.fonksiyonOrtami;
}
public FonksiyonOrtami fonksiyonOrtami() {
return fonksiyonOrtami;
}
public final void degiskenTanimla(String degiskenIsmi) {
if (degiskenler.containsKey(degiskenIsmi))
throw new RuntimeException("Degisken '" + degiskenIsmi + "' zaten tanimliydi.");
degiskenler.put(degiskenIsmi, DTanimsiz.TANIMSIZ);
}
private final CalismaOrtami ortamBul(String degiskenIsmi) {
CalismaOrtami ortam = this;
while (ortam != null && ! ortam.degiskenler.containsKey(degiskenIsmi))
ortam = ortam.ustOrtam;
return ortam;
}
public final void degiskenAta(String degiskenIsmi, Deger deger) {
CalismaOrtami ortam = ortamBul(degiskenIsmi);
if (ortam == null)
throw new RuntimeException("Degisken '" + degiskenIsmi + "' tanimli degil.");
ortam.degiskenler.put(degiskenIsmi, deger);
}
public final Deger degiskenBul(String degiskenIsmi) {
CalismaOrtami ortam = ortamBul(degiskenIsmi);
if (ortam == null)
throw new RuntimeException("Degisken '" + degiskenIsmi + "' tanimli degil.");
return (Deger)ortam.degiskenler.get(degiskenIsmi);
}
}
final class FonksiyonOrtami extends CalismaOrtami {
private ArrayList parametreler; // ArrayList<Deger>
private Deger sonuc; // bu calisma ortaminda calisan kodun sonucu
private Deger calisanFonksiyon = DTanimsiz.TANIMSIZ;
public FonksiyonOrtami(CalismaOrtami ustOrtam, ArrayList parametreler) {
this.ustOrtam = ustOrtam;
this.fonksiyonOrtami = this;
this.parametreler = parametreler;
}
public FonksiyonOrtami(CalismaOrtami ustOrtam, ArrayList parametreler, DFonksiyon calisanFonksiyon) {
this(ustOrtam, parametreler);
if (calisanFonksiyon != null)
this.calisanFonksiyon = calisanFonksiyon;
}
public int parametreSayisi() {
return parametreler.size();
}
public Deger parametre(int i) {
return i < parametreler.size() ? (Deger) parametreler.get(i) :
DTanimsiz.TANIMSIZ;
}
public boolean sonucVar() {
return sonuc != null;
}
public Deger sonuc() {
return sonuc;
}
public void sonuc(Deger deger) {
this.sonuc = deger;
}
public void parametreleriKopyala(Tree parametreIsimleri) {
for (int i = 0, n = parametreIsimleri.getChildCount(); i < n; ++i) {
String isim = parametreIsimleri.getChild(i).getText();
degiskenTanimla(isim);
degiskenAta(isim, parametre(i));
}
}
}