diff options
author | bd-912 <bdunahu@colostate.edu> | 2024-04-25 23:35:21 -0600 |
---|---|---|
committer | bd-912 <bdunahu@colostate.edu> | 2024-04-25 23:35:21 -0600 |
commit | 416e88a071c9d091c3d868171cecb4bdd093b6b6 (patch) | |
tree | 56888efec737d83699b2dbc5818d5a9bef672640 /st/SymTableExtend.java | |
parent | 7e6c63a4d5a4acf9a4f993e6dff6ee7912f26c1e (diff) |
Files I forgot to add
Diffstat (limited to 'st/SymTableExtend.java')
-rw-r--r-- | st/SymTableExtend.java | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/st/SymTableExtend.java b/st/SymTableExtend.java new file mode 100644 index 0000000..2e634d8 --- /dev/null +++ b/st/SymTableExtend.java @@ -0,0 +1,44 @@ +package st; + +import syntaxtree.*; +import visitor.*; +import java.util.*; +import misc.*; + +/** + * Performs a bottom-up preliminary visit through the AST + * initializing all ClassInstances and placing them in the passed ST + */ +public class SymTableExtend<R> extends GJDepthFirst<R,SymbolTable> { + + + /** + * f0 -> "class" + * f1 -> Identifier() + * f2 -> "extends" + * f3 -> Identifier() + * f4 -> "{" + * f5 -> ( VarDeclaration() )* + * f6 -> ( MethodDeclaration() )* + * f7 -> "}" + */ + public R visit(ClassExtendsDeclaration n, SymbolTable symt) { + String act = n.f1.f0.tokenImage; + symt.setActive(TypeEnum.classname, symt.getClass(act)); + n.f0.accept(this, symt); + n.f1.accept(this, symt); + n.f2.accept(this, symt); + n.f3.accept(this, symt); + n.f4.accept(this, symt); + n.f5.accept(this, symt); + n.f6.accept(this, symt); + n.f7.accept(this, symt); + + + symt.setExtend(n.f3.f0.tokenImage); + + + return null; + } + +} |