import minijava.analysis.*; import minijava.node.*; import minijava.symbol.*; public class SymbolTableClass extends DepthFirstAdapter { private Table symtable; private boolean [] ok ; SymbolTableClass(Table table, boolean [] ok) { this.symtable = table; this.ok = ok; } public void inAMainClass(AMainClass node) { String ClassName = node.getClname().toString().trim(); symtable.addClass(ClassName, null); symtable.getClass(ClassName).addMethod("main", new AIntegerType()); //main (String [] id) ---> id not used at all, maybe later } public void inASimpleClassDecl(ASimpleClassDecl node) { String ClassName = node.getIdentifier().toString().trim(); int line = ((AIdentifier) node.getIdentifier()).getIdLiteral().getLine(); if (!symtable.addClass(ClassName, null)) { System.out.println("Line " + line + ": " +" Class " + ClassName + "is already defined"); ok[0] = false; // System.exit( -1); } } public void inAExtendsClassDecl(AExtendsClassDecl node) { String ClassName = node.getNewcl().toString().trim(); String ParentClass = node.getOldcl().toString().trim(); int line = ((AIdentifier) node.getNewcl()).getIdLiteral().getLine(); if (!symtable.addClass(ClassName, ParentClass)) { System.out.println("Line " + line + ": " +" Class " + ClassName + "is already defined"); ok[0] = false; // System.exit( -1); } } }