minijava.symtable
Class SymbolTableBuilder

java.lang.Object
  extended by minijava.visitor.DepthFirstVisitor
      extended by minijava.symtable.SymbolTableBuilder
All Implemented Interfaces:
Visitor

public class SymbolTableBuilder
extends DepthFirstVisitor

This class defines a visitor that traverses a MiniJava program's syntax tree and generates a SymbolTable that maps symbolic identifiers to Types at the top level (that is, class types).

Author:
Santoso Wijaya
See Also:
SymbolTable, Symbol, Type

Constructor Summary
SymbolTableBuilder()
           
 
Method Summary
 SymbolTable<Type> getSymbolTable()
           
 void visit(ClassDeclaration n)
           nodeToken -> "class" identifier -> Identifier() nodeToken1 -> "{" nodeListOptional -> ( VarDeclaration() )* nodeListOptional1 -> ( MethodDeclaration() )* nodeToken2 -> "}"
 void visit(ClassExtendsDeclaration n)
           nodeToken -> "class" identifier -> Identifier() nodeToken1 -> "extends" identifier1 -> Identifier() nodeToken2 -> "{" nodeListOptional -> ( VarDeclaration() )* nodeListOptional1 -> ( MethodDeclaration() )* nodeToken3 -> "}"
 void visit(FormalParameter n)
           type -> Type() identifier -> Identifier()
 void visit(Goal n)
          Inserts class identifiers into the symbol table first (forward declaration).
 void visit(MainClass n)
           nodeToken -> "class" identifier -> Identifier() nodeToken1 -> "{" nodeToken2 -> "public" nodeToken3 -> "static" nodeToken4 -> "void" nodeToken5 -> "main" nodeToken6 -> "(" nodeToken7 -> "String" nodeToken8 -> "[" nodeToken9 -> "]" identifier1 -> Identifier() nodeToken10 -> ")" nodeToken11 -> "{" nodeListOptional -> ( VarDeclaration() )* nodeListOptional1 -> ( Statement() )* nodeToken12 -> "}" nodeToken13 -> "}"
 void visit(MethodDeclaration n)
           nodeToken -> "public" type -> Type() identifier -> Identifier() nodeToken1 -> "(" nodeOptional -> ( FormalParameterList() )? nodeToken2 -> ")" nodeToken3 -> "{" nodeListOptional -> ( VarDeclaration() )* nodeListOptional1 -> ( Statement() )* nodeToken4 -> "return" expression -> Expression() nodeToken5 -> ";" nodeToken6 -> "}"
 void visit(VarDeclaration n)
           type -> Type() identifier -> Identifier() nodeToken -> ";"
 
Methods inherited from class minijava.visitor.DepthFirstVisitor
visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SymbolTableBuilder

public SymbolTableBuilder()
Method Detail

getSymbolTable

public SymbolTable<Type> getSymbolTable()

visit

public void visit(MainClass n)
Description copied from class: DepthFirstVisitor
 nodeToken -> "class"
 identifier -> Identifier()
 nodeToken1 -> "{"
 nodeToken2 -> "public"
 nodeToken3 -> "static"
 nodeToken4 -> "void"
 nodeToken5 -> "main"
 nodeToken6 -> "("
 nodeToken7 -> "String"
 nodeToken8 -> "["
 nodeToken9 -> "]"
 identifier1 -> Identifier()
 nodeToken10 -> ")"
 nodeToken11 -> "{"
 nodeListOptional -> ( VarDeclaration() )*
 nodeListOptional1 -> ( Statement() )*
 nodeToken12 -> "}"
 nodeToken13 -> "}"
 

Specified by:
visit in interface Visitor
Overrides:
visit in class DepthFirstVisitor

visit

public void visit(Goal n)
Inserts class identifiers into the symbol table first (forward declaration). Subsequently, visit(minijava.syntaxtree.ClassDeclaration) and visit(minijava.syntaxtree.ClassExtendsDeclaration) should assume that a binding of identifier to class object has already been made.

Specified by:
visit in interface Visitor
Overrides:
visit in class DepthFirstVisitor
Parameters:
n - the type node

visit

public void visit(ClassDeclaration n)
Description copied from class: DepthFirstVisitor
 nodeToken -> "class"
 identifier -> Identifier()
 nodeToken1 -> "{"
 nodeListOptional -> ( VarDeclaration() )*
 nodeListOptional1 -> ( MethodDeclaration() )*
 nodeToken2 -> "}"
 

Specified by:
visit in interface Visitor
Overrides:
visit in class DepthFirstVisitor

visit

public void visit(ClassExtendsDeclaration n)
Description copied from class: DepthFirstVisitor
 nodeToken -> "class"
 identifier -> Identifier()
 nodeToken1 -> "extends"
 identifier1 -> Identifier()
 nodeToken2 -> "{"
 nodeListOptional -> ( VarDeclaration() )*
 nodeListOptional1 -> ( MethodDeclaration() )*
 nodeToken3 -> "}"
 

Specified by:
visit in interface Visitor
Overrides:
visit in class DepthFirstVisitor

visit

public void visit(VarDeclaration n)
Description copied from class: DepthFirstVisitor
 type -> Type()
 identifier -> Identifier()
 nodeToken -> ";"
 

Specified by:
visit in interface Visitor
Overrides:
visit in class DepthFirstVisitor

visit

public void visit(MethodDeclaration n)
Description copied from class: DepthFirstVisitor
 nodeToken -> "public"
 type -> Type()
 identifier -> Identifier()
 nodeToken1 -> "("
 nodeOptional -> ( FormalParameterList() )?
 nodeToken2 -> ")"
 nodeToken3 -> "{"
 nodeListOptional -> ( VarDeclaration() )*
 nodeListOptional1 -> ( Statement() )*
 nodeToken4 -> "return"
 expression -> Expression()
 nodeToken5 -> ";"
 nodeToken6 -> "}"
 

Specified by:
visit in interface Visitor
Overrides:
visit in class DepthFirstVisitor

visit

public void visit(FormalParameter n)
Description copied from class: DepthFirstVisitor
 type -> Type()
 identifier -> Identifier()
 

Specified by:
visit in interface Visitor
Overrides:
visit in class DepthFirstVisitor