diff options
Diffstat (limited to 'st')
-rw-r--r-- | st/SymTableClasses.java | 6 | ||||
-rw-r--r-- | st/SymTableMethods.java | 4 | ||||
-rw-r--r-- | st/SymTableVars.java | 13 | ||||
-rw-r--r-- | st/SymbolTable.java | 7 | ||||
-rw-r--r-- | st/TokenKey.java | 9 | ||||
-rw-r--r-- | st/TypeEnum.java | 2 |
6 files changed, 33 insertions, 8 deletions
diff --git a/st/SymTableClasses.java b/st/SymTableClasses.java index 3c0b761..02fd6eb 100644 --- a/st/SymTableClasses.java +++ b/st/SymTableClasses.java @@ -52,7 +52,7 @@ public class SymTableClasses<R> extends GJDepthFirst<R,SymbolTable> { n.f17.accept(this, symt); - TokenKey id = new TokenKey(n.f1.f0.tokenImage, null, null); + TokenKey id = new TokenKey(n.f1.f0.tokenImage, TypeEnum.classname, null, null); ClassInstance instance = new ClassInstance(id.getName()); symt.put(id, instance); @@ -76,7 +76,7 @@ public class SymTableClasses<R> extends GJDepthFirst<R,SymbolTable> { n.f5.accept(this, symt); - TokenKey id = new TokenKey(n.f1.f0.tokenImage, null, null); + TokenKey id = new TokenKey(n.f1.f0.tokenImage, TypeEnum.classname, null, null); ClassInstance instance = new ClassInstance(id.getName()); symt.put(id, instance); @@ -105,7 +105,7 @@ public class SymTableClasses<R> extends GJDepthFirst<R,SymbolTable> { n.f7.accept(this, symt); - TokenKey id = new TokenKey(n.f1.f0.tokenImage, null, null); + TokenKey id = new TokenKey(n.f1.f0.tokenImage, TypeEnum.classname, null, null); ClassInstance instance = new ClassInstance(id.getName()); symt.put(id, instance); diff --git a/st/SymTableMethods.java b/st/SymTableMethods.java index 5adac56..9f17b0c 100644 --- a/st/SymTableMethods.java +++ b/st/SymTableMethods.java @@ -53,7 +53,7 @@ public class SymTableMethods<R> extends GJDepthFirst<R,SymbolTable> { n.f16.accept(this, symt); n.f17.accept(this, symt); - TokenKey id = new TokenKey(n.f6.tokenImage, (ClassInstance) symt.getActive(TypeEnum.classname), null); + TokenKey id = new TokenKey(n.f6.tokenImage, TypeEnum.method, (ClassInstance) symt.getActive(TypeEnum.classname), null); MethodInstance main = new MethodInstance(id.getName(), null, (ClassInstance) symt.getActive(TypeEnum.classname)); symt.put(id, main); @@ -144,7 +144,7 @@ public class SymTableMethods<R> extends GJDepthFirst<R,SymbolTable> { - TokenKey id = new TokenKey(n.f2.f0.tokenImage, (ClassInstance) symt.getActive(TypeEnum.classname), null); + TokenKey id = new TokenKey(n.f2.f0.tokenImage, TypeEnum.method, (ClassInstance) symt.getActive(TypeEnum.classname), null); ClassInstance rtrn = null; switch (n.f1.f0.which) { case 0: diff --git a/st/SymTableVars.java b/st/SymTableVars.java index 014beb1..b9a7c1b 100644 --- a/st/SymTableVars.java +++ b/st/SymTableVars.java @@ -55,6 +55,17 @@ public class SymTableVars<R> extends GJDepthFirst<R,SymbolTable> { n.f16.accept(this, symt); n.f17.accept(this, symt); + // add the "string" arg + TokenKey s = new TokenKey(n.f11.f0.tokenImage, + TypeEnum.integer, + (ClassInstance) symt.getActive(TypeEnum.classname), + (MethodInstance) symt.getActive(TypeEnum.method)); + TypeInstance instance = new TypeInstance(s.getName(), TypeEnum.string, (MethodInstance) symt.getActive(TypeEnum.method), + (ClassInstance) symt.getActive(TypeEnum.classname)); + symt.put(s, instance); + symt.addParameter(s.getName()); + + symt.addMethod(id); symt.removeActive(TypeEnum.method); symt.removeActive(TypeEnum.classname); @@ -119,6 +130,7 @@ public class SymTableVars<R> extends GJDepthFirst<R,SymbolTable> { n.f1.accept(this, symt); n.f2.accept(this, symt); TokenKey id = new TokenKey(n.f1.f0.tokenImage, + TypeEnum.integer, (ClassInstance) symt.getActive(TypeEnum.classname), (MethodInstance) symt.getActive(TypeEnum.method)); TypeEnum rtrn = null; @@ -191,6 +203,7 @@ public class SymTableVars<R> extends GJDepthFirst<R,SymbolTable> { n.f0.accept(this, symt); n.f1.accept(this, symt); TokenKey id = new TokenKey(n.f1.f0.tokenImage, + TypeEnum.integer, (ClassInstance) symt.getActive(TypeEnum.classname), (MethodInstance) symt.getActive(TypeEnum.method)); diff --git a/st/SymbolTable.java b/st/SymbolTable.java index 15d33a0..fa6bdf2 100644 --- a/st/SymbolTable.java +++ b/st/SymbolTable.java @@ -62,6 +62,7 @@ public class SymbolTable { cls.getName(), cls.getType())); cls.addLocal(t); this.symt.put(new TokenKey(t.getName(), + TypeEnum.integer, cls, null), t); @@ -71,6 +72,7 @@ public class SymbolTable { m.getName(), m.getType(), cls.getName(), cls.getType())); this.symt.put(new TokenKey(m.getName(), + TypeEnum.method, cls, null), m); @@ -150,6 +152,7 @@ public class SymbolTable { public TypeInstance getType(String name) { TokenKey id = new TokenKey(name, + TypeEnum.integer, (ClassInstance) this.getActive(TypeEnum.classname), (MethodInstance) this.getActive(TypeEnum.method)); AbstractInstance symbol; @@ -164,6 +167,7 @@ public class SymbolTable { public TypeInstance getTypeAttr(String name) { TokenKey id = new TokenKey(name, + TypeEnum.integer, (ClassInstance) this.getActive(TypeEnum.classname), null); AbstractInstance symbol; @@ -179,6 +183,7 @@ public class SymbolTable { public MethodInstance getMethod(String name) { TokenKey id = new TokenKey(name, + TypeEnum.method, (ClassInstance) this.getActive(TypeEnum.classname), null); AbstractInstance symbol; @@ -193,6 +198,7 @@ public class SymbolTable { public MethodInstance getMethod(String name, ClassInstance c) { TokenKey id = new TokenKey(name, + TypeEnum.method, c, null); AbstractInstance symbol; @@ -207,6 +213,7 @@ public class SymbolTable { public ClassInstance getClass(String name) { TokenKey id = new TokenKey(name, + TypeEnum.classname, null, null); AbstractInstance symbol; diff --git a/st/TokenKey.java b/st/TokenKey.java index 948e06a..a421c95 100644 --- a/st/TokenKey.java +++ b/st/TokenKey.java @@ -10,18 +10,21 @@ import misc.*; public class TokenKey { private String name; + private TypeEnum type; private AbstractInstance cls; // null for classes private AbstractInstance mtd; // null for classes, methods - public TokenKey(String name, AbstractInstance cls, AbstractInstance mtd) { + public TokenKey(String name, TypeEnum type, AbstractInstance cls, AbstractInstance mtd) { this.name = name; + this.type = type; this.cls = cls; this.mtd = mtd; } @Override public String toString() { - return String.format("%s (%s,%s)", + return String.format("%s of %s (%s,%s)", this.name, + this.type, this.mtd, this.cls); } @@ -47,6 +50,8 @@ public class TokenKey { // } if (other instanceof TokenKey && (o = (TokenKey) other).name.equals(this.name) && + ((o.type == null && this.type == null) || + (o.type != null && o.type.equals(this.type))) && ((o.cls == null && this.cls == null) || (o.cls != null && o.cls.equals(this.cls))) && ((o.mtd == null && this.mtd == null) || diff --git a/st/TypeEnum.java b/st/TypeEnum.java index e469828..1782e8b 100644 --- a/st/TypeEnum.java +++ b/st/TypeEnum.java @@ -1,5 +1,5 @@ package st; public enum TypeEnum { - classname, method, intarray, bool, integer + classname, method, intarray, bool, integer, string } |