Package com.singularsys.jep
Class PrintVisitor
- java.lang.Object
-
- com.singularsys.jep.PrintVisitor
-
- All Implemented Interfaces:
JepComponent
,ParserVisitor
,java.io.Serializable
- Direct Known Subclasses:
DPrintVisitor
,PrintVisitor.NullPrintVisitor
public class PrintVisitor extends java.lang.Object implements ParserVisitor, JepComponent
Prints an expression with configuration options.By default, expressions are printed with only necessary bracketing. For example, if an expression "a+(b+c)" is parsed and printed, it will be printed as
a+b+c
since the bracketing does not affect the evaluation.Enabling the FULL_BRACKET mode prints the expression with many brackets as
((-1.0)/sqrt((1.0-(x^2.0))))
.To use the PrintVisitor, you can invoke it through the Jep class as follows:
Jep j = ...; Node in = ...; j.print(in, "x");
You can also print expressions independently from the Jep class by using this class and calling the various print methods.
- Since:
- Dec 04 and NumberFormat object can be supplied to modify printing of numbers., Dec 04 PrintVisitor can now cope with 3 or more arguments to + and *., 3.3 greater customisation now possible, 4.0 Operators can implement PrintRulesI
- Author:
- Rich Morris Created on 20-Jun-2003
- See Also:
Jep.print(Node)
,Jep.print(Node, PrintStream)
,Jep.println(Node)
,Jep.println(Node, PrintStream)
,Jep.toString(Node)
, Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
PrintVisitor.NullPrintVisitor
A do-nothing version of a PrintVisitor for reducing memory usage.static interface
PrintVisitor.PrintRulesI
This interface specifies the method needed to implement a special print rule.static class
PrintVisitor.StdElePrintRule
Prints an list access in form a[3] or for multidimensional access use the list syntax.static class
PrintVisitor.StdListPrintRule
Prints a list of elements using '[' and ']' as delimiters and ',' as a separators.
-
Field Summary
Fields Modifier and Type Field Description static int
COMPLEX_I
Enable this mode to print complex numbers as 3+2 iprotected java.text.NumberFormat
format
The NumberFormat object used to print numbers.protected java.text.FieldPosition
fp
static int
FULL_BRACKET
Enable this mode to print all brackets.protected java.lang.String
FunctionArgSep
protected java.lang.String
FunLBracket
protected java.lang.String
FunRBracket
protected java.lang.String
LBracket
protected int
mode
The current mode for printing.static PrintVisitor.NullPrintVisitor
NULL_PRINT_VISITOR
A do-nothing PrintVisitor, useful for reducing memory usage when printing not required.protected OperatorTableI
ot
protected java.lang.String
RBracket
protected java.lang.StringBuffer
sb
protected java.util.HashMap<java.lang.String,PrintVisitor.PrintRulesI>
specialFunRules
protected java.util.HashMap<Operator,PrintVisitor.PrintRulesI>
specialRules
protected java.util.HashMap<java.lang.String,java.lang.String>
specialVarName
-
Constructor Summary
Constructors Constructor Description PrintVisitor()
Creates a visitor to create and print string representations of an expression tree.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addSpecialRule(Operator op, PrintVisitor.PrintRulesI rule)
Adds a special print rule to be added for a given operator.void
addSpecialRule(java.lang.String funName, PrintVisitor.PrintRulesI rule)
Adds a special print rule to be added for a given function.java.lang.String
addSpecialVarName(java.lang.String oldName, java.lang.String newName)
Allows a replacement for a specific variable namevoid
append(java.lang.String s)
Add a string to buffer.java.lang.String
formatValue(java.lang.Object val)
Returns a formatted version of the value.void
formatValue(java.lang.Object val, java.lang.StringBuffer sb1)
Appends a formatted versions of val to the string buffer.java.lang.String
getFunArgSep()
Get the string separating function arguments.java.lang.String
getFunLBracket()
Get the string for left bracket around function arguments.java.lang.String
getFunRBracket()
Get the string for right bracket around function arguments.java.lang.String
getLBracket()
Get the string for left brackets.JepComponent
getLightWeightInstance()
Gets a light-weight instance suitable for using in multiple threads.int
getMaxLen()
int
getMode()
Return the current print mode.boolean
getMode(int testmode)
Returns true if the specified testmode is active.java.lang.String
getRBracket()
Get the string for right brackets.void
init(Jep jep)
Initialize the component.void
print(Node node)
Prints on System.out.void
print(Node node, java.io.PrintStream out)
Prints the tree descending from node with lots of brackets or specified stream.void
printBrackets(Node node)
Print a node surrounded by brackets.void
println(Node node)
Prints on System.out.void
println(Node node, java.io.PrintStream out)
Prints the tree descending from node with a newline at end.void
printNoBrackets(Node node)
Print the node with no brackets.void
printWrap(java.lang.StringBuffer sb1, java.io.PrintStream out)
Utility method to print a wrapped version of the output.void
setFunArgSep(java.lang.String functionArgSep)
Set the string separating function arguments.void
setFunLBracket(java.lang.String funLBracket)
Set the string for left bracket around function arguments.void
setFunRBracket(java.lang.String funRBracket)
Set the string for right bracket around function arguments.void
setLBracket(java.lang.String bracket)
Set the string for left brackets.void
setMaxLen(int i)
Sets the maximum length printed per line.void
setMode(int mode, boolean flag)
Set printing mode.void
setNumberFormat(java.text.NumberFormat format)
Sets the number format to use.void
setRBracket(java.lang.String bracket)
Set the string for right brackets.boolean
testLeft(Operator top, Node lhs)
Test if brackets are necessary around left hand side.boolean
testMid(Operator top, Node mid)
Test if brackets are needed around a middle argumentx + (y) + z
boolean
testRight(Operator top, Node rhs)
Tests if brackets are necessary around the RHS child of a operator.java.lang.String
toString(Node node)
Returns a String representation of the equation.java.lang.Object
visit(ASTConstant node, java.lang.Object data)
java.lang.Object
visit(ASTFunNode node, java.lang.Object data)
Prints a standard function: fun(arg, arg)java.lang.Object
visit(ASTOpNode node, java.lang.Object data)
java.lang.Object
visit(ASTVarNode node, java.lang.Object data)
protected void
visitBinary(ASTOpNode node)
protected void
visitUnary(ASTOpNode node)
Print a unary operator.
-
-
-
Field Detail
-
LBracket
protected java.lang.String LBracket
-
RBracket
protected java.lang.String RBracket
-
FunLBracket
protected java.lang.String FunLBracket
-
FunRBracket
protected java.lang.String FunRBracket
-
FunctionArgSep
protected java.lang.String FunctionArgSep
-
FULL_BRACKET
public static final int FULL_BRACKET
Enable this mode to print all brackets. Removes all ambiguity.- See Also:
- Constant Field Values
-
COMPLEX_I
public static final int COMPLEX_I
Enable this mode to print complex numbers as 3+2 i- See Also:
- Constant Field Values
-
sb
protected transient java.lang.StringBuffer sb
-
mode
protected int mode
The current mode for printing. Stores multiple flags as a bit field.
-
specialRules
protected java.util.HashMap<Operator,PrintVisitor.PrintRulesI> specialRules
-
specialFunRules
protected java.util.HashMap<java.lang.String,PrintVisitor.PrintRulesI> specialFunRules
-
specialVarName
protected java.util.HashMap<java.lang.String,java.lang.String> specialVarName
-
format
protected java.text.NumberFormat format
The NumberFormat object used to print numbers.
-
fp
protected transient java.text.FieldPosition fp
-
ot
protected OperatorTableI ot
-
NULL_PRINT_VISITOR
public static final PrintVisitor.NullPrintVisitor NULL_PRINT_VISITOR
A do-nothing PrintVisitor, useful for reducing memory usage when printing not required. This is static Singleton instance which can be safely be reused.- Since:
- 3.5
-
-
Method Detail
-
init
public void init(Jep jep)
Description copied from interface:JepComponent
Initialize the component. This methods is called whenever a component is added to Jep. Hence it allows components to keep track of the other components they may rely on.- Specified by:
init
in interfaceJepComponent
- Parameters:
jep
- the current Jep instance
-
print
public void print(Node node, java.io.PrintStream out)
Prints the tree descending from node with lots of brackets or specified stream.- See Also:
Jep.println(Node, PrintStream)
-
printWrap
public void printWrap(java.lang.StringBuffer sb1, java.io.PrintStream out)
Utility method to print a wrapped version of the output. Each line will be a maximum of maxLen characters wide with lines broken on- Parameters:
sb1
- the StringBuffer to printout
- the output stream
-
print
public void print(Node node)
Prints on System.out.
-
println
public void println(Node node, java.io.PrintStream out)
Prints the tree descending from node with a newline at end.
-
println
public void println(Node node)
Prints on System.out.
-
toString
public java.lang.String toString(Node node)
Returns a String representation of the equation.
-
append
public void append(java.lang.String s)
Add a string to buffer. Classes implementingPrintVisitor.PrintRulesI
should call this method.- Parameters:
s
- the string to append- Since:
- 3.4.0
-
addSpecialRule
public void addSpecialRule(Operator op, PrintVisitor.PrintRulesI rule)
Adds a special print rule to be added for a given operator.- Parameters:
op
- the operator the rule applies torule
- the print rule to use
-
addSpecialRule
public void addSpecialRule(java.lang.String funName, PrintVisitor.PrintRulesI rule)
Adds a special print rule to be added for a given function.- Parameters:
funName
- name of functionrule
- the print rule to use
-
addSpecialVarName
public java.lang.String addSpecialVarName(java.lang.String oldName, java.lang.String newName)
Allows a replacement for a specific variable name- Parameters:
oldName
- name of variable to replacenewName
- string to print as replacement
-
printNoBrackets
public void printNoBrackets(Node node) throws JepException
Print the node with no brackets.- Throws:
JepException
-
printBrackets
public void printBrackets(Node node) throws JepException
Print a node surrounded by brackets.- Throws:
JepException
-
visitUnary
protected void visitUnary(ASTOpNode node) throws JepException
Print a unary operator.- Throws:
JepException
-
visitBinary
protected void visitBinary(ASTOpNode node) throws JepException
- Throws:
JepException
-
testLeft
public boolean testLeft(Operator top, Node lhs)
Test if brackets are necessary around left hand side.- Parameters:
top
- The current operator being printed.lhs
- The node on the left hand side.- Returns:
- True if a bracket is necessary, false otherwise.
-
testMid
public boolean testMid(Operator top, Node mid)
Test if brackets are needed around a middle argumentx + (y) + z
- Parameters:
top
- The current operator being printed.mid
- The node on the middle of a chain.- Returns:
- True if a bracket is necessary, false otherwise.
-
testRight
public boolean testRight(Operator top, Node rhs)
Tests if brackets are necessary around the RHS child of a operator.- Parameters:
top
- The operator.rhs
- The right hand side node.- Returns:
- True if brackets are necessary, false otherwise.
-
visit
public java.lang.Object visit(ASTFunNode node, java.lang.Object data) throws JepException
Prints a standard function: fun(arg, arg)- Specified by:
visit
in interfaceParserVisitor
- Throws:
JepException
-
visit
public java.lang.Object visit(ASTOpNode node, java.lang.Object data) throws JepException
- Specified by:
visit
in interfaceParserVisitor
- Throws:
JepException
-
visit
public java.lang.Object visit(ASTVarNode node, java.lang.Object data) throws JepException
- Specified by:
visit
in interfaceParserVisitor
- Throws:
JepException
-
visit
public java.lang.Object visit(ASTConstant node, java.lang.Object data) throws JepException
- Specified by:
visit
in interfaceParserVisitor
- Throws:
JepException
-
formatValue
public void formatValue(java.lang.Object val, java.lang.StringBuffer sb1)
Appends a formatted versions of val to the string buffer.- Parameters:
val
- The value to formatsb1
- The StringBuffer to append to
-
formatValue
public java.lang.String formatValue(java.lang.Object val)
Returns a formatted version of the value.
-
getMode
public int getMode()
Return the current print mode. Note that the mode is a bit field.
-
getMode
public boolean getMode(int testmode)
Returns true if the specified testmode is active.- Parameters:
testmode
- The mode to check.- Returns:
- True if the specified mode is active.
-
setMode
public void setMode(int mode, boolean flag)
Set printing mode. In full bracket mode the brackets each element in the tree will be surrounded by brackets to indicate the tree structure. In the default mode, (full bracket off) the number of brackets is minimized so (x+y)+z will be printed as x+y+z.- Parameters:
mode
- which flags to change, typically FULL_BRACKETflag
- whether to switch this mode on or off
-
setNumberFormat
public void setNumberFormat(java.text.NumberFormat format)
Sets the number format to use. A useful format is a DecimalFormat with minimum fraction digits set to zero. This makes simple powers, like x^2, print nicely.DecimalFormat fmt = new DecimalFormat(); fmt.setMinimumFractionDigits(0); fmt.setMaximumFractionDigits(15); jep.getPrintVisitor().setNumberFormat(fmt);
- Parameters:
format
- format to use, if null just uses toString
-
setMaxLen
public void setMaxLen(int i)
Sets the maximum length printed per line. If the value is not -1 then the string will be broken into chunks each of which is less than the max length.- Parameters:
i
- the maximum length
-
getMaxLen
public int getMaxLen()
- Returns:
- the maximum length printed per line
-
getLightWeightInstance
public JepComponent getLightWeightInstance()
Description copied from interface:JepComponent
Gets a light-weight instance suitable for using in multiple threads.- Specified by:
getLightWeightInstance
in interfaceJepComponent
- Returns:
- either an new instance, null or 'this'.
-
getLBracket
public java.lang.String getLBracket()
Get the string for left brackets.
-
setLBracket
public void setLBracket(java.lang.String bracket)
Set the string for left brackets.
-
getRBracket
public java.lang.String getRBracket()
Get the string for right brackets.
-
setRBracket
public void setRBracket(java.lang.String bracket)
Set the string for right brackets.
-
getFunLBracket
public java.lang.String getFunLBracket()
Get the string for left bracket around function arguments.
-
setFunLBracket
public void setFunLBracket(java.lang.String funLBracket)
Set the string for left bracket around function arguments.
-
getFunRBracket
public java.lang.String getFunRBracket()
Get the string for right bracket around function arguments.
-
setFunRBracket
public void setFunRBracket(java.lang.String funRBracket)
Set the string for right bracket around function arguments.
-
getFunArgSep
public java.lang.String getFunArgSep()
Get the string separating function arguments.
-
setFunArgSep
public void setFunArgSep(java.lang.String functionArgSep)
Set the string separating function arguments.
-
-