summaryrefslogtreecommitdiff
path: root/st/SymTableTopDown.java
diff options
context:
space:
mode:
Diffstat (limited to 'st/SymTableTopDown.java')
-rw-r--r--st/SymTableTopDown.java32
1 files changed, 17 insertions, 15 deletions
diff --git a/st/SymTableTopDown.java b/st/SymTableTopDown.java
index 566752e..5bfd971 100644
--- a/st/SymTableTopDown.java
+++ b/st/SymTableTopDown.java
@@ -32,10 +32,11 @@ public class SymTableTopDown<R> extends GJDepthFirst<R,SymbolTable> {
* f17 -> "}"
*/
public R visit(MainClass n, SymbolTable symt) {
- String id = n.f1.f0.tokenImage;
- symt.setActive(TypeEnum.classname, id);
- symt.setActive(TypeEnum.method, "main");
- symt.addMethod("main");
+ TokenKey id = new TokenKey(n.f1.f0.tokenImage, 0);
+ symt.setActive(TypeEnum.classname, symt.getClass(id));
+ TokenKey main = new TokenKey(n.f6.tokenImage, n.f6.beginLine);
+ symt.setActive(TypeEnum.method, symt.getMethod(main));
+ symt.addMethod(main);
n.f0.accept(this, symt);
@@ -70,8 +71,8 @@ public class SymTableTopDown<R> extends GJDepthFirst<R,SymbolTable> {
* f5 -> "}"
*/
public R visit(ClassDeclaration n, SymbolTable symt) {
- String id = n.f1.f0.tokenImage;
- symt.setActive(TypeEnum.classname, id);
+ TokenKey id = new TokenKey(n.f1.f0.tokenImage, 0);
+ symt.setActive(TypeEnum.classname, symt.getClass(id));
n.f0.accept(this, symt);
@@ -94,9 +95,10 @@ public class SymTableTopDown<R> extends GJDepthFirst<R,SymbolTable> {
* f7 -> "}"
*/
public R visit(ClassExtendsDeclaration n, SymbolTable symt) {
- String id = n.f1.f0.tokenImage;
- symt.setActive(TypeEnum.classname, id);
- symt.setExtend(n.f3.f0.tokenImage);
+ TokenKey id = new TokenKey(n.f1.f0.tokenImage, 0);
+ symt.setActive(TypeEnum.classname, symt.getClass(id));
+ TokenKey ext = new TokenKey(n.f3.f0.tokenImage, 0);
+ symt.setExtend(ext);
n.f0.accept(this, symt);
@@ -120,7 +122,7 @@ public class SymTableTopDown<R> extends GJDepthFirst<R,SymbolTable> {
((Identifier) n.f0.f0.choice).f0.tokenImage :
null;
- String id = n.f1.f0.tokenImage;
+ TokenKey id = new TokenKey(n.f1.f0.tokenImage, n.f1.f0.beginLine);
TypeInstance me = symt.getType(id);
symt.addLocal(id);
symt.addClassInstance(me, cls);
@@ -148,13 +150,13 @@ public class SymTableTopDown<R> extends GJDepthFirst<R,SymbolTable> {
* f12 -> "}"
*/
public R visit(MethodDeclaration n, SymbolTable symt) {
- String cls = symt.getActive(TypeEnum.classname);
+ ClassInstance cls = (ClassInstance) symt.getActive(TypeEnum.classname);
- String id = n.f2.f0.tokenImage;
+ TokenKey id = new TokenKey(n.f2.f0.tokenImage, n.f2.f0.beginLine);
MethodInstance me = symt.getMethod(id);
- symt.setActive(TypeEnum.method, id);
+ symt.setActive(TypeEnum.method, me);
symt.addMethod(id);
- symt.addClassInstance(me, cls);
+ symt.addClassInstance(me, cls.getName());
n.f0.accept(this, symt);
@@ -179,7 +181,7 @@ public class SymTableTopDown<R> extends GJDepthFirst<R,SymbolTable> {
* f1 -> Identifier()
*/
public R visit(FormalParameter n, SymbolTable symt) {
- String id = n.f1.f0.tokenImage;
+ TokenKey id = new TokenKey(n.f1.f0.tokenImage, n.f1.f0.beginLine);
symt.addParameter(id);