minijava.translate
Class PigletTranslator

java.lang.Object
  extended by minijava.visitor.GJDepthFirst<PigletResult,PigletContext>
      extended by minijava.translate.PigletTranslator
All Implemented Interfaces:
GJVisitor<PigletResult,PigletContext>

public final class PigletTranslator
extends GJDepthFirst<PigletResult,PigletContext>

Translates a MiniJava AST to a Piglet AST. The grammar for the Piglet language can be found here, and its specification here.

Author:
Santoso Wijaya

Constructor Summary
PigletTranslator()
          Creates a translator visitor.
 
Method Summary
 Goal translate(Goal mj)
          Visits a MiniJava AST, constructing a Piglet AST along the way, and then returns the root of the latter tree.
 PigletResult visit(AllocationExpression n, PigletContext argu)
           nodeToken -> "new" identifier -> Identifier() nodeToken1 -> "(" nodeToken2 -> ")"
 PigletResult visit(AndExpression n, PigletContext argu)
           primaryExpression -> PrimaryExpression() nodeToken -> "&&" primaryExpression1 -> PrimaryExpression()
 PigletResult visit(ArrayAllocationExpression n, PigletContext argu)
           nodeToken -> "new" nodeToken1 -> "int" nodeToken2 -> "[" expression -> Expression() nodeToken3 -> "]"
 PigletResult visit(ArrayAssignmentStatement n, PigletContext argu)
           identifier -> Identifier() nodeToken -> "[" expression -> Expression() nodeToken1 -> "]" nodeToken2 -> "=" expression1 -> Expression() nodeToken3 -> ";"
 PigletResult visit(ArrayLength n, PigletContext argu)
           primaryExpression -> PrimaryExpression() nodeToken -> "." nodeToken1 -> "length"
 PigletResult visit(ArrayLookup n, PigletContext argu)
           primaryExpression -> PrimaryExpression() nodeToken -> "[" primaryExpression1 -> PrimaryExpression() nodeToken1 -> "]"
 PigletResult visit(AssignmentStatement n, PigletContext argu)
           identifier -> Identifier() nodeToken -> "=" expression -> Expression() nodeToken1 -> ";"
 PigletResult visit(BracketExpression n, PigletContext argu)
           nodeToken -> "(" expression -> Expression() nodeToken1 -> ")"
 PigletResult visit(ClassDeclaration n, PigletContext argu)
           nodeToken -> "class" identifier -> Identifier() nodeToken1 -> "{" nodeListOptional -> ( VarDeclaration() )* nodeListOptional1 -> ( MethodDeclaration() )* nodeToken2 -> "}"
 PigletResult visit(ClassExtendsDeclaration n, PigletContext argu)
           nodeToken -> "class" identifier -> Identifier() nodeToken1 -> "extends" identifier1 -> Identifier() nodeToken2 -> "{" nodeListOptional -> ( VarDeclaration() )* nodeListOptional1 -> ( MethodDeclaration() )* nodeToken3 -> "}"
 PigletResult visit(CompareExpression n, PigletContext argu)
           primaryExpression -> PrimaryExpression() nodeToken -> "<" primaryExpression1 -> PrimaryExpression()
 PigletResult visit(Expression n, PigletContext argu)
           nodeChoice -> AndExpression() | CompareExpression() | PlusExpression() | MinusExpression() | TimesExpression() | ArrayLookup() | ArrayLength() | MessageSend() | PrimaryExpression()
 PigletResult visit(FalseLiteral n, PigletContext argu)
           nodeToken -> "false"
 PigletResult visit(Identifier n, PigletContext argu)
           nodeToken -> <IDENTIFIER>
 PigletResult visit(IfStatement n, PigletContext argu)
           nodeToken -> "if" nodeToken1 -> "(" expression -> Expression() nodeToken2 -> ")" statement -> Statement() nodeToken3 -> "else" statement1 -> Statement()
 PigletResult visit(IntegerLiteral n, PigletContext argu)
           nodeToken -> <INTEGER_LITERAL>
 PigletResult visit(MainClass n, PigletContext argu)
           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 -> "}"
 PigletResult visit(MessageSend n, PigletContext argu)
           primaryExpression -> PrimaryExpression() nodeToken -> "." identifier -> Identifier() nodeToken1 -> "(" nodeOptional -> ( ExpressionList() )? nodeToken2 -> ")"
 PigletResult visit(MethodDeclaration n, PigletContext argu)
           nodeToken -> "public" type -> Type() identifier -> Identifier() nodeToken1 -> "(" nodeOptional -> ( FormalParameterList() )? nodeToken2 -> ")" nodeToken3 -> "{" nodeListOptional -> ( VarDeclaration() )* nodeListOptional1 -> ( Statement() )* nodeToken4 -> "return" expression -> Expression() nodeToken5 -> ";" nodeToken6 -> "}"
 PigletResult visit(MinusExpression n, PigletContext argu)
           primaryExpression -> PrimaryExpression() nodeToken -> "-" primaryExpression1 -> PrimaryExpression()
 PigletResult visit(NotExpression n, PigletContext argu)
           nodeToken -> "!" expression -> Expression()
 PigletResult visit(PlusExpression n, PigletContext argu)
           primaryExpression -> PrimaryExpression() nodeToken -> "+" primaryExpression1 -> PrimaryExpression()
 PigletResult visit(PrimaryExpression n, PigletContext argu)
           nodeChoice -> IntegerLiteral() | TrueLiteral() | FalseLiteral() | Identifier() | ThisExpression() | ArrayAllocationExpression() | AllocationExpression() | NotExpression() | BracketExpression()
 PigletResult visit(PrintStatement n, PigletContext argu)
           nodeToken -> "System.out.println" nodeToken1 -> "(" expression -> Expression() nodeToken2 -> ")" nodeToken3 -> ";"
 PigletResult visit(ThisExpression n, PigletContext argu)
           nodeToken -> "this"
 PigletResult visit(TimesExpression n, PigletContext argu)
           primaryExpression -> PrimaryExpression() nodeToken -> "*" primaryExpression1 -> PrimaryExpression()
 PigletResult visit(TrueLiteral n, PigletContext argu)
           nodeToken -> "true"
 PigletResult visit(WhileStatement n, PigletContext argu)
           nodeToken -> "while" nodeToken1 -> "(" expression -> Expression() nodeToken2 -> ")" statement -> Statement()
 
Methods inherited from class minijava.visitor.GJDepthFirst
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

PigletTranslator

public PigletTranslator()
Creates a translator visitor. Call translate(minijava.syntaxtree.Goal) to produce a Piglet AST from a given MiniJava AST.

Method Detail

translate

public Goal translate(Goal mj)
Visits a MiniJava AST, constructing a Piglet AST along the way, and then returns the root of the latter tree.

Parameters:
mj - the root of the MiniJava AST to be translated
Returns:
the root of the translated Piglet AST
Throws:
minijava.type.TypeException - when the given MiniJava AST contains a type error

visit

public PigletResult visit(MainClass n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 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 GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(ClassDeclaration n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> "class"
 identifier -> Identifier()
 nodeToken1 -> "{"
 nodeListOptional -> ( VarDeclaration() )*
 nodeListOptional1 -> ( MethodDeclaration() )*
 nodeToken2 -> "}"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

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

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(MethodDeclaration n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 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 GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(AssignmentStatement n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 identifier -> Identifier()
 nodeToken -> "="
 expression -> Expression()
 nodeToken1 -> ";"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(ArrayAssignmentStatement n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 identifier -> Identifier()
 nodeToken -> "["
 expression -> Expression()
 nodeToken1 -> "]"
 nodeToken2 -> "="
 expression1 -> Expression()
 nodeToken3 -> ";"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(PrintStatement n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> "System.out.println"
 nodeToken1 -> "("
 expression -> Expression()
 nodeToken2 -> ")"
 nodeToken3 -> ";"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(IfStatement n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> "if"
 nodeToken1 -> "("
 expression -> Expression()
 nodeToken2 -> ")"
 statement -> Statement()
 nodeToken3 -> "else"
 statement1 -> Statement()
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(WhileStatement n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> "while"
 nodeToken1 -> "("
 expression -> Expression()
 nodeToken2 -> ")"
 statement -> Statement()
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(Expression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeChoice -> AndExpression()
       | CompareExpression()
       | PlusExpression()
       | MinusExpression()
       | TimesExpression()
       | ArrayLookup()
       | ArrayLength()
       | MessageSend()
       | PrimaryExpression()
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(PrimaryExpression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeChoice -> IntegerLiteral()
       | TrueLiteral()
       | FalseLiteral()
       | Identifier()
       | ThisExpression()
       | ArrayAllocationExpression()
       | AllocationExpression()
       | NotExpression()
       | BracketExpression()
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(BracketExpression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> "("
 expression -> Expression()
 nodeToken1 -> ")"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(IntegerLiteral n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> <INTEGER_LITERAL>
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(TrueLiteral n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> "true"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(FalseLiteral n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> "false"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(AndExpression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 primaryExpression -> PrimaryExpression()
 nodeToken -> "&&"
 primaryExpression1 -> PrimaryExpression()
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(NotExpression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> "!"
 expression -> Expression()
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(CompareExpression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 primaryExpression -> PrimaryExpression()
 nodeToken -> "<"
 primaryExpression1 -> PrimaryExpression()
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(PlusExpression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 primaryExpression -> PrimaryExpression()
 nodeToken -> "+"
 primaryExpression1 -> PrimaryExpression()
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(MinusExpression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 primaryExpression -> PrimaryExpression()
 nodeToken -> "-"
 primaryExpression1 -> PrimaryExpression()
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(TimesExpression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 primaryExpression -> PrimaryExpression()
 nodeToken -> "*"
 primaryExpression1 -> PrimaryExpression()
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(Identifier n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> <IDENTIFIER>
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(ThisExpression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> "this"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(MessageSend n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 primaryExpression -> PrimaryExpression()
 nodeToken -> "."
 identifier -> Identifier()
 nodeToken1 -> "("
 nodeOptional -> ( ExpressionList() )?
 nodeToken2 -> ")"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(AllocationExpression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> "new"
 identifier -> Identifier()
 nodeToken1 -> "("
 nodeToken2 -> ")"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(ArrayAllocationExpression n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 nodeToken -> "new"
 nodeToken1 -> "int"
 nodeToken2 -> "["
 expression -> Expression()
 nodeToken3 -> "]"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(ArrayLength n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 primaryExpression -> PrimaryExpression()
 nodeToken -> "."
 nodeToken1 -> "length"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>

visit

public PigletResult visit(ArrayLookup n,
                          PigletContext argu)
Description copied from class: GJDepthFirst
 primaryExpression -> PrimaryExpression()
 nodeToken -> "["
 primaryExpression1 -> PrimaryExpression()
 nodeToken1 -> "]"
 

Specified by:
visit in interface GJVisitor<PigletResult,PigletContext>
Overrides:
visit in class GJDepthFirst<PigletResult,PigletContext>