|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectptolemy.data.expr.AbstractParseTreeVisitor
ptolemy.codegen.java.kernel.JavaParseTreeCodeGenerator
public class JavaParseTreeCodeGenerator
This class evaluates a parse tree given a reference to its root node. It implements a visitor that visits the parse tree in depth-first order, evaluating each node and storing the result as a token in the node. Two exceptions are logic nodes and the ternary if node (the ? : construct), which do not necessarily evaluate all children nodes.
This class has the following limitations:
ASTPtRootNode
| Red |
| Red |
| Field Summary | |
|---|---|
protected java.lang.String |
_childCode
The fire() method code. |
private int |
_depth
The depth, used for debugging and indenting. |
protected Token |
_evaluatedChildToken
Temporary storage for the result of evaluating a child node. |
protected java.lang.StringBuffer |
_initializeCode
The initialize() method code. |
protected java.lang.StringBuffer |
_preinitializeCode
The preinitialize() method code. |
private static java.util.List |
_primitiveTypes
A static list of the primitive types supported by the code generator. |
private ParserScope |
_scope
The scope for evaluation. |
protected java.lang.StringBuffer |
_sharedCode
Shared code code. |
private java.lang.StringBuffer |
_trace
Used for debugging. |
private ParseTreeTypeInference |
_typeInference
Used for type checking. |
protected java.lang.StringBuffer |
_wrapupCode
The wrapup() method code. |
private static java.util.Map |
cFunctionMap
|
| Constructor Summary | |
|---|---|
JavaParseTreeCodeGenerator()
|
|
| Method Summary | |
|---|---|
protected void |
_assert(boolean flag,
ASTPtRootNode node,
java.lang.String message)
Assert that the given boolean value, which describes the given parse tree node, is true. |
private java.lang.String |
_codeGenType(Type ptType)
Get the corresponding type in code generation from the given Ptolemy type. |
protected Token[] |
_evaluateAllChildren(ASTPtRootNode node)
Loop through all of the children of this node, visiting each one of them; this will cause their token value to be determined. |
protected void |
_evaluateArrayIndex(ASTPtRootNode node,
Token value,
Type type)
Evaluate the array index operation represented by the given node. |
protected Token |
_evaluateChild(ASTPtRootNode node,
int i)
Evaluate the child with the given index of the given node. |
private boolean |
_isPrimitive(Type ptType)
Determine if the given type is primitive. |
private java.lang.String |
_specializeArgument(java.lang.String function,
int argumentIndex,
Type argumentType,
java.lang.String argumentCode)
|
private java.lang.String |
_specializeReturnValue(java.lang.String function,
Type returnType,
java.lang.String returnCode)
|
private java.lang.String |
_targetType(Type ptType)
Get the corresponding type in Java from the given Ptolemy type. |
protected void |
_trace(java.lang.String string)
Add a record to the current trace corresponding to the given message. |
protected void |
_traceEnter(ASTPtRootNode node)
Add a record to the current trace corresponding to the start of the evaluation of the given node. |
protected void |
_traceLeave(ASTPtRootNode node)
Add a record to the current trace corresponding to the completion of the evaluation of the given node. |
java.lang.String |
escapeForTargetLanguage(java.lang.String string)
Given a string, escape special characters as necessary. |
Token |
evaluateParseTree(ASTPtRootNode node)
Evaluate the parse tree with the specified root node. |
Token |
evaluateParseTree(ASTPtRootNode node,
ParserScope scope)
Evaluate the parse tree with the specified root node using the specified scope to resolve the values of variables. |
java.lang.String |
generateFireCode()
Generate code that corresponds with the fire() method. |
java.lang.String |
generateInitializeCode()
Generate code that corresponds with the initialize() method. |
java.lang.String |
generatePreinitializeCode()
Generate code that corresponds with the preinitialize() method. |
java.lang.String |
generateSharedCode()
Generate shared code. |
java.lang.String |
generateWrapupCode()
Generate code that corresponds with the wrapup() method. |
java.lang.String |
traceParseTreeEvaluation(ASTPtRootNode node,
ParserScope scope)
Trace the evaluation of the parse tree with the specified root node using the specified scope to resolve the values of variables. |
void |
visitArrayConstructNode(ASTPtArrayConstructNode node)
Construct an ArrayToken that contains the tokens from the children of the specified node. |
void |
visitBitwiseNode(ASTPtBitwiseNode node)
Evaluate a bitwise operator on the children of the specified node, where the particular operator is property of the node. |
void |
visitFunctionalIfNode(ASTPtFunctionalIfNode node)
Evaluate the first child, and depending on its (boolean) result, evaluate either the second or the third child. |
void |
visitFunctionApplicationNode(ASTPtFunctionApplicationNode node)
Apply a function to the children of the specified node. |
void |
visitFunctionDefinitionNode(ASTPtFunctionDefinitionNode node)
Define a function, where the children specify the argument types and the expression. |
void |
visitLeafNode(ASTPtLeafNode node)
Evaluate a numeric constant or an identifier. |
void |
visitLogicalNode(ASTPtLogicalNode node)
Evaluate a logical AND or OR on the children of the specified node. |
void |
visitMatrixConstructNode(ASTPtMatrixConstructNode node)
Construct a matrix containing the children nodes. |
void |
visitMethodCallNode(ASTPtMethodCallNode node)
Apply a method to the children of the specified node, where the first child is the object on which the method is defined and the rest of the children are arguments. |
void |
visitPowerNode(ASTPtPowerNode node)
Evaluate the power operator on the children of the specified node. |
void |
visitProductNode(ASTPtProductNode node)
Multiply the children of the specified node. |
void |
visitRecordConstructNode(ASTPtRecordConstructNode node)
Construct a record by assigning the fields values given by the children nodes. |
void |
visitRelationalNode(ASTPtRelationalNode node)
|
void |
visitShiftNode(ASTPtShiftNode node)
Apply a shift operator to the children of the specified node. |
void |
visitSumNode(ASTPtSumNode node)
Apply a sum operator to the children of the specified node. |
void |
visitUnaryNode(ASTPtUnaryNode node)
Apply a unary operator to the single child of the specified node. |
| Methods inherited from class ptolemy.data.expr.AbstractParseTreeVisitor |
|---|
_unsupportedVisitException, _visitAllChildren, _visitChild, visitAssignmentNode, visitUnionConstructNode |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
private static final java.util.List _primitiveTypes
protected Token _evaluatedChildToken
protected java.lang.String _childCode
protected java.lang.StringBuffer _initializeCode
protected java.lang.StringBuffer _preinitializeCode
protected java.lang.StringBuffer _sharedCode
protected java.lang.StringBuffer _wrapupCode
private ParserScope _scope
private ParseTreeTypeInference _typeInference
private java.lang.StringBuffer _trace
private int _depth
private static java.util.Map cFunctionMap
| Constructor Detail |
|---|
public JavaParseTreeCodeGenerator()
| Method Detail |
|---|
public Token evaluateParseTree(ASTPtRootNode node)
throws IllegalActionException
node - The root of the parse tree.
IllegalActionException - If an parse error occurs.
public Token evaluateParseTree(ASTPtRootNode node,
ParserScope scope)
throws IllegalActionException
evaluateParseTree in interface ParseTreeCodeGeneratornode - The root of the parse tree.scope - The scope for evaluation.
IllegalActionException - If an error occurs during
evaluation.
public java.lang.String traceParseTreeEvaluation(ASTPtRootNode node,
ParserScope scope)
throws IllegalActionException
node - The root of the parse tree.scope - The scope for evaluation.
IllegalActionException - If an error occurs during
evaluation.public java.lang.String generateFireCode()
generateFireCode in interface ParseTreeCodeGeneratorpublic java.lang.String generateInitializeCode()
public java.lang.String generatePreinitializeCode()
public java.lang.String generateSharedCode()
public java.lang.String generateWrapupCode()
public java.lang.String escapeForTargetLanguage(java.lang.String string)
\\ becomes \\\\
which means:
\{ becomes \\{
\} becomes \\}
\( becomes \\(
\) becomes \\)
and
\\" becomes \"
newline becomes \n
escapeForTargetLanguage in interface ParseTreeCodeGeneratorstring - The string to escape.
StringUtilities.escapeForXML(String)
public void visitArrayConstructNode(ASTPtArrayConstructNode node)
throws IllegalActionException
visitArrayConstructNode in interface ParseTreeVisitorvisitArrayConstructNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitBitwiseNode(ASTPtBitwiseNode node)
throws IllegalActionException
visitBitwiseNode in interface ParseTreeVisitorvisitBitwiseNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitFunctionApplicationNode(ASTPtFunctionApplicationNode node)
throws IllegalActionException
MatlabUtilities.evaluate(String, Set, ParserScope)
.
visitFunctionApplicationNode in interface ParseTreeVisitorvisitFunctionApplicationNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
private java.lang.String _specializeReturnValue(java.lang.String function,
Type returnType,
java.lang.String returnCode)
private java.lang.String _specializeArgument(java.lang.String function,
int argumentIndex,
Type argumentType,
java.lang.String argumentCode)
public void visitFunctionDefinitionNode(ASTPtFunctionDefinitionNode node)
throws IllegalActionException
visitFunctionDefinitionNode in interface ParseTreeVisitorvisitFunctionDefinitionNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitFunctionalIfNode(ASTPtFunctionalIfNode node)
throws IllegalActionException
visitFunctionalIfNode in interface ParseTreeVisitorvisitFunctionalIfNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitLeafNode(ASTPtLeafNode node)
throws IllegalActionException
visitLeafNode in interface ParseTreeVisitorvisitLeafNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitLogicalNode(ASTPtLogicalNode node)
throws IllegalActionException
visitLogicalNode in interface ParseTreeVisitorvisitLogicalNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitMatrixConstructNode(ASTPtMatrixConstructNode node)
throws IllegalActionException
visitMatrixConstructNode in interface ParseTreeVisitorvisitMatrixConstructNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitMethodCallNode(ASTPtMethodCallNode node)
throws IllegalActionException
visitMethodCallNode in interface ParseTreeVisitorvisitMethodCallNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitPowerNode(ASTPtPowerNode node)
throws IllegalActionException
visitPowerNode in interface ParseTreeVisitorvisitPowerNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitProductNode(ASTPtProductNode node)
throws IllegalActionException
visitProductNode in interface ParseTreeVisitorvisitProductNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitRecordConstructNode(ASTPtRecordConstructNode node)
throws IllegalActionException
visitRecordConstructNode in interface ParseTreeVisitorvisitRecordConstructNode in class AbstractParseTreeVisitornode - The record constructor node.
IllegalActionException - If an parse error occurs.
public void visitRelationalNode(ASTPtRelationalNode node)
throws IllegalActionException
visitRelationalNode in interface ParseTreeVisitorvisitRelationalNode in class AbstractParseTreeVisitorIllegalActionException
public void visitShiftNode(ASTPtShiftNode node)
throws IllegalActionException
visitShiftNode in interface ParseTreeVisitorvisitShiftNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitSumNode(ASTPtSumNode node)
throws IllegalActionException
visitSumNode in interface ParseTreeVisitorvisitSumNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
public void visitUnaryNode(ASTPtUnaryNode node)
throws IllegalActionException
visitUnaryNode in interface ParseTreeVisitorvisitUnaryNode in class AbstractParseTreeVisitornode - The specified node.
IllegalActionException - If an parse error occurs.
protected void _assert(boolean flag,
ASTPtRootNode node,
java.lang.String message)
flag - The flag that is asserted to be true.node - The node on which the assertion is asserted.message - The message to include in the exception.
InternalErrorException - If the assertion is violated.
Note that this is a runtime exception, so it need not be declared
explicitly.
protected Token[] _evaluateAllChildren(ASTPtRootNode node)
throws IllegalActionException
node - The node whose children are evaluated.
IllegalActionException - If an parse error occurs.
protected void _evaluateArrayIndex(ASTPtRootNode node,
Token value,
Type type)
throws IllegalActionException
node - The node that caused this method to be called.value - The token that is being indexed into, which must
be an ArrayToken.type - The element type.
IllegalActionException - If an parse error occurs.
protected Token _evaluateChild(ASTPtRootNode node,
int i)
throws IllegalActionException
node - The given node.i - The given index.
IllegalActionException - If an parse error occurs.protected void _trace(java.lang.String string)
string - The given message.protected void _traceEnter(ASTPtRootNode node)
node - The given node.protected void _traceLeave(ASTPtRootNode node)
node - The given node.private java.lang.String _codeGenType(Type ptType)
ptType - The given Ptolemy type.
IllegalActionException - Thrown if the given ptolemy cannot
be resolved.private boolean _isPrimitive(Type ptType)
ptType - The given ptolemy type.
private java.lang.String _targetType(Type ptType)
ptType - The given Ptolemy type.
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||