com.voytechs.jnetstream.codec
Class Linker

java.lang.Object
  extended by com.voytechs.jnetstream.npl.Visitor
      extended by com.voytechs.jnetstream.codec.Linker
All Implemented Interfaces:
ProtocolLinker

public class Linker
extends Visitor
implements ProtocolLinker

Linker for NPL AST tree. Links all the variable references.


Field Summary
 boolean debug
           
 
Constructor Summary
Linker()
           
 
Method Summary
protected  void exportProperty(java.lang.String name, SymTable sym)
           
 NodeList getAST()
          Returns the root of the AST.
 java.lang.String getDefaultCandidate()
           
 SymTable getGlobalSymTable()
           
 SymTable getPacketSymTable()
           
 SymTable getTypesSymTable()
           
 void link(NodeList block)
           
 void linkHeaders(NodeList block)
           
 void linkProtocol(Protocol protocol)
           
 void linkProtocolBinding(Protocol proto)
           
 void loadTypePrimitives()
           
 void recordDefinitions(NodeList block)
          traverses the top level nodes and records their definitions in the SymTable.
 void resolveReferences(NodeList block)
           
 void resolveReferences(NodeList block, SymTable table)
           
 void resolveTypes(NodeList block)
           
 boolean traverse(AssertStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(BufferStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(ConstReferenceNode node, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(EnumReferenceNode node, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(EnumStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(FamilyStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(FieldStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(FlowentryStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(FlowkeyStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(ForStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(HeaderStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(IfStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(LinkStatement stat, java.lang.Object user1, java.lang.Object user2)
          Process the "link" NPL statement by linking protocol headers.
 boolean traverse(MutableReferenceNode node, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(OpNode op, java.lang.Object user1, java.lang.Object user2)
          Special OpNode traversal routine that records the last node visited.
 boolean traverse(PrintStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(ProcessStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(PropertyStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(VariableStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 boolean traverse(WhileStatement stat, java.lang.Object user1, java.lang.Object user2)
           
 void unLinkProtocolBinding(ProtocolBinding binding)
           
 
Methods inherited from class com.voytechs.jnetstream.npl.Visitor
traverse, traverse, traverse, traverse, traverse, traverse, traverse, visit
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

debug

public boolean debug
Constructor Detail

Linker

public Linker()
Parameters:
-
Throws:
Method Detail

link

public void link(NodeList block)
          throws NodeException
Throws:
NodeException

resolveTypes

public void resolveTypes(NodeList block)
                  throws NodeException
Throws:
NodeException

resolveReferences

public void resolveReferences(NodeList block)
                       throws NodeException
Throws:
NodeException

resolveReferences

public void resolveReferences(NodeList block,
                              SymTable table)
                       throws NodeException
Throws:
NodeException

linkHeaders

public void linkHeaders(NodeList block)
                 throws NodeException
Throws:
NodeException

exportProperty

protected void exportProperty(java.lang.String name,
                              SymTable sym)

recordDefinitions

public void recordDefinitions(NodeList block)
                       throws NodeException
traverses the top level nodes and records their definitions in the SymTable. Only statement are expected at this level. If any non-statement nodes ie. expression are found, an error message is reported.

Throws:
NodeException

loadTypePrimitives

public void loadTypePrimitives()
                        throws NodeException
Throws:
NodeException

getAST

public NodeList getAST()
Returns the root of the AST.


traverse

public boolean traverse(FamilyStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(HeaderStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(FieldStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(AssertStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(BufferStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(FlowkeyStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(FlowentryStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(ProcessStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(LinkStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Process the "link" NPL statement by linking protocol headers.

Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(MutableReferenceNode node,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(VariableStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(ConstReferenceNode node,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(EnumReferenceNode node,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(OpNode op,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Special OpNode traversal routine that records the last node visited.

Overrides:
traverse in class Visitor
Parameters:
op - OpNode to be traversed.
user1 - Depends at what stage of linking. Usually SymTable.
user2 - Parent node that called this.
Throws:
NodeException

traverse

public boolean traverse(IfStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(ForStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(WhileStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(PrintStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(EnumStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

traverse

public boolean traverse(PropertyStatement stat,
                        java.lang.Object user1,
                        java.lang.Object user2)
                 throws NodeException
Overrides:
traverse in class Visitor
Throws:
NodeException

getDefaultCandidate

public java.lang.String getDefaultCandidate()
Returns:
Returns the defaultCandidate.

linkProtocol

public void linkProtocol(Protocol protocol)
                  throws NodeException
Specified by:
linkProtocol in interface ProtocolLinker
Throws:
NodeException

linkProtocolBinding

public void linkProtocolBinding(Protocol proto)
                         throws ProtocolBindingException
Specified by:
linkProtocolBinding in interface ProtocolLinker
Throws:
ProtocolBindingException

getGlobalSymTable

public SymTable getGlobalSymTable()
Returns:
Returns the globalSymTable.

getPacketSymTable

public SymTable getPacketSymTable()
Returns:
Returns the packetSymTable.

getTypesSymTable

public SymTable getTypesSymTable()
Returns:
Returns the typesSymTable.

unLinkProtocolBinding

public void unLinkProtocolBinding(ProtocolBinding binding)
Specified by:
unLinkProtocolBinding in interface ProtocolLinker