diff options
author | bd-912 <bdunahu@colostate.edu> | 2024-04-25 00:17:56 -0600 |
---|---|---|
committer | bd-912 <bdunahu@colostate.edu> | 2024-04-25 00:18:51 -0600 |
commit | 765337c53286db39ffc3c64eede602afe3899647 (patch) | |
tree | 893b488f70b22c4d18cec6934ed479feb0943b54 /st/SymTableTopDown.java | |
parent | d2017d232557b45792857b972ca8883df6e79506 (diff) |
Rewrote SymbolTable to add uniqueness to stored tokens
Diffstat (limited to 'st/SymTableTopDown.java')
-rw-r--r-- | st/SymTableTopDown.java | 32 |
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); |