com.singularsys.jep
Class Operator

java.lang.Object
  extended by com.singularsys.jep.Operator
All Implemented Interfaces:
java.io.Serializable
Direct Known Subclasses:
TernaryOperator, TernaryOperator.RhsTernaryOperator

public class Operator
extends java.lang.Object
implements java.io.Serializable

An Operator with additional information about its commutativity etc.

Operators have a number of properties:

Various is... and get... methods are provided to query the properties of the operator.

Author:
Rich Morris Created on 19-Oct-2003
See Also:
Serialized Form

Field Summary
static int ASSOCIATIVE
          Associative operators x*(y*z) == (x*y)*z .
static int BINARY
          Binary operators, such as x+y, x>y
static int COMMUTATIVE
          Commutative operators x*y = y*x.
static int COMPOSITE
          composite operators, like a-b which is a+(-b)
static int EQUIVALENCE
          Equivalence relations = reflexive, transitive and symmetric.
static int LEFT
          Left binding like +: 1+2+3 -> (1+2)+3
static int NARY
          Trinary ops such as ?
static int NO_ARGS
          No arguments to operator
static int NOT_IN_PARSER
          Non standard operators, like array access.
static int PREFIX
          prefix operators -x
static int REFLEXIVE
          Reflective relations x=x for all x.
static int RIGHT
          Right binding like =: 1=2=3 -> 1=(2=3)
static int SELF_INVERSE
          self inverse operators like -(-x) !
static int SUFFIX
          postfix operators x%
static int SYMMETRIC
          Symmetric relation x=y implies y=x.
static int TERNARY
          three argument operators like java's cond?
static int TRANSITIVE
          Transitive relations x=y and y=z implies x=z
static int UNARY
          Unary operators, such as -x !
static int USE_BINDING_FOR_PRINT
          For non commutative operators printing can be determined by the left or right binding.
 
Constructor Summary
Operator(java.lang.String name, PostfixMathCommandI pfmc, int flags)
          Construct a new operator with no precedence set.
Operator(java.lang.String name, PostfixMathCommandI pfmc, int flags, int precedence)
          Constructs a new operator with a given precedence.
Operator(java.lang.String name, java.lang.String symbol, PostfixMathCommandI pfmc, int flags)
          Constructs a new operator, with a different name and symbol
Operator(java.lang.String name, java.lang.String symbol, PostfixMathCommandI pfmc, int flags, int precedence)
          Constructs a new operator, with a different name and symbol and allows a given precedence to be set.
 
Method Summary
 boolean addAltSymbol(java.lang.String altSymbol)
          Adds an alternate symbol which can be used at parse time.
 java.util.List<java.lang.String> getAltSymbols()
           
 Operator getBinaryInverseOp()
           
 int getBinding()
          Deprecated. 
 int getFlags()
           
 Operator getInverseOp()
           
 int getKey()
          Get the key code used to identify the operator in the operator table.
 java.lang.String getName()
          returns a unique name defining this operator.
 PostfixMathCommandI getPFMC()
           
 int getPrecedence()
          Get the precedence of the operator.
 Operator getRootOp()
           
 java.lang.String getSymbol()
          returns the symbol used by this operator.
 boolean isAssociative()
           
 boolean isBinary()
           
 boolean isCommutative()
           
 boolean isComposite()
           
 boolean isDistributiveOver(Operator op)
           
 boolean isEquivalence()
           
 boolean isLeftBinding()
           
 boolean isNary()
           
 boolean isPrefix()
           
 boolean isReflexive()
           
 boolean isRightBinding()
           
 boolean isSelfInverse()
           
 boolean isSuffix()
           
 boolean isSymmetric()
           
 boolean isTernary()
           
 boolean isTransitive()
           
 boolean isUnary()
           
 boolean notInParser()
           
 int numArgs()
           
 void setBinaryInverseOp(Operator inv)
           
 void setDistributiveOver(Operator op)
           
 void setFlag(int flag, boolean val)
          Set the value of a specific flag.
 void setInverseOp(Operator inv)
           
 void setKey(int key)
          Key code used to identify the operator in the operator table.
 void setPFMC(PostfixMathCommandI pfmc)
           
 void setPrecedence(int i)
          Set the precedence of the operator.
 void setRootOp(Operator root)
           
 void setSymbol(java.lang.String sym)
          Sets the symbol used by the operator.
 java.lang.String toFullString()
          returns a verbose representation of the operator and all its properties.
 java.lang.String toString()
           
 boolean useBindingForPrint()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

NO_ARGS

public static final int NO_ARGS
No arguments to operator

See Also:
Constant Field Values

UNARY

public static final int UNARY
Unary operators, such as -x !x ~x

See Also:
Constant Field Values

BINARY

public static final int BINARY
Binary operators, such as x+y, x>y

See Also:
Constant Field Values

NARY

public static final int NARY
Trinary ops such as ?: and or higher like [x,y,z,w]

See Also:
Constant Field Values

LEFT

public static final int LEFT
Left binding like +: 1+2+3 -> (1+2)+3

See Also:
Constant Field Values

RIGHT

public static final int RIGHT
Right binding like =: 1=2=3 -> 1=(2=3)

See Also:
Constant Field Values

ASSOCIATIVE

public static final int ASSOCIATIVE
Associative operators x*(y*z) == (x*y)*z .

See Also:
Constant Field Values

COMMUTATIVE

public static final int COMMUTATIVE
Commutative operators x*y = y*x.

See Also:
Constant Field Values

REFLEXIVE

public static final int REFLEXIVE
Reflective relations x=x for all x.

See Also:
Constant Field Values

SYMMETRIC

public static final int SYMMETRIC
Symmetric relation x=y implies y=x.

See Also:
Constant Field Values

TRANSITIVE

public static final int TRANSITIVE
Transitive relations x=y and y=z implies x=z

See Also:
Constant Field Values

EQUIVALENCE

public static final int EQUIVALENCE
Equivalence relations = reflexive, transitive and symmetric.

See Also:
Constant Field Values

PREFIX

public static final int PREFIX
prefix operators -x

See Also:
Constant Field Values

SUFFIX

public static final int SUFFIX
postfix operators x%

See Also:
Constant Field Values

SELF_INVERSE

public static final int SELF_INVERSE
self inverse operators like -(-x) !(!x)

See Also:
Constant Field Values

COMPOSITE

public static final int COMPOSITE
composite operators, like a-b which is a+(-b)

See Also:
Constant Field Values

USE_BINDING_FOR_PRINT

public static final int USE_BINDING_FOR_PRINT
For non commutative operators printing can be determined by the left or right binding. For example (a-b)-c is printed as a-b-c (flag set). But a/b/c could be ambiguous so (a/b)/c is printed with brackets (flag not set).

See Also:
Constant Field Values

NOT_IN_PARSER

public static final int NOT_IN_PARSER
Non standard operators, like array access. These will typically require the PrintRulesI interface to print and require special parsing options.

See Also:
Constant Field Values

TERNARY

public static final int TERNARY
three argument operators like java's cond?tval:fval

See Also:
TernaryOperator, Constant Field Values
Constructor Detail

Operator

public Operator(java.lang.String name,
                PostfixMathCommandI pfmc,
                int flags)
Construct a new operator with no precedence set.

Parameters:
name - printable name of the operator
pfmc - postfix math command for the operator
flags - set of flags defining the properties of the operator.

Operator

public Operator(java.lang.String name,
                PostfixMathCommandI pfmc,
                int flags,
                int precedence)
Constructs a new operator with a given precedence.

Parameters:
name - printable name of the operator
pfmc - postfix math command for the operator
flags - set of flags defining the properties of the operator
precedence - operator precedence to be set

Operator

public Operator(java.lang.String name,
                java.lang.String symbol,
                PostfixMathCommandI pfmc,
                int flags)
Constructs a new operator, with a different name and symbol

Parameters:
name - name of operator, must be unique, used when describing operator
symbol - printable name of operator, used for printing equations
pfmc - postfix math command for operator
flags - set of flags defining the properties of the operator

Operator

public Operator(java.lang.String name,
                java.lang.String symbol,
                PostfixMathCommandI pfmc,
                int flags,
                int precedence)
Constructs a new operator, with a different name and symbol and allows a given precedence to be set.

Parameters:
name - name of operator, must be unique, used when describing operator
symbol - printable name of operator, used for printing equations
pfmc - postfix math command for operator
flags - set of flags defining the properties of the operator.
precedence - operator precedence to be set
Method Detail

getSymbol

public final java.lang.String getSymbol()
returns the symbol used by this operator.


setSymbol

public final void setSymbol(java.lang.String sym)
Sets the symbol used by the operator. Note Jep.reinitializeComponents() must be called after using this method.

Parameters:
sym - the new symbol to use.

getName

public final java.lang.String getName()
returns a unique name defining this operator.


getPFMC

public final PostfixMathCommandI getPFMC()

setPFMC

public final void setPFMC(PostfixMathCommandI pfmc)

getPrecedence

public final int getPrecedence()
Get the precedence of the operator. Lower values correspond to tighter binding, that is * gives a lower value than + and 1+2*3 is 1+(2*3).

Returns:
the precedence

setPrecedence

public void setPrecedence(int i)
Set the precedence of the operator. Lower values correspond to tighter binding, that is * gives a lower value than + and 1+2*3 is 1+(2*3).


setDistributiveOver

public final void setDistributiveOver(Operator op)

isDistributiveOver

public boolean isDistributiveOver(Operator op)

setRootOp

public void setRootOp(Operator root)

setInverseOp

public void setInverseOp(Operator inv)

setBinaryInverseOp

public void setBinaryInverseOp(Operator inv)

getRootOp

public Operator getRootOp()

getInverseOp

public Operator getInverseOp()

getBinaryInverseOp

public Operator getBinaryInverseOp()

getFlags

public final int getFlags()

getBinding

@Deprecated
public final int getBinding()
Deprecated. 

When parsing how is x+y+z interpreted. Can be Operator.LEFT x+y+z -> (x+y)+z or Operator.RIGHT x=y=z -> x=(y=z). This is now deprecated

See Also:
isLeftBinding(), isRightBinding()

isLeftBinding

public final boolean isLeftBinding()

isRightBinding

public final boolean isRightBinding()

isAssociative

public final boolean isAssociative()

isCommutative

public final boolean isCommutative()

isBinary

public final boolean isBinary()

isUnary

public final boolean isUnary()

isNary

public final boolean isNary()

numArgs

public final int numArgs()

isTransitive

public final boolean isTransitive()

isSymmetric

public final boolean isSymmetric()

isReflexive

public final boolean isReflexive()

isEquivalence

public final boolean isEquivalence()

isPrefix

public final boolean isPrefix()

isSuffix

public final boolean isSuffix()

isTernary

public final boolean isTernary()

isComposite

public final boolean isComposite()

isSelfInverse

public final boolean isSelfInverse()

useBindingForPrint

public final boolean useBindingForPrint()

notInParser

public final boolean notInParser()

setFlag

public void setFlag(int flag,
                    boolean val)
Set the value of a specific flag. Use with care

Parameters:
flag -
val -

toFullString

public java.lang.String toFullString()
returns a verbose representation of the operator and all its properties.


toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

getKey

public int getKey()
Get the key code used to identify the operator in the operator table.


setKey

public void setKey(int key)
Key code used to identify the operator in the operator table.


getAltSymbols

public java.util.List<java.lang.String> getAltSymbols()

addAltSymbol

public boolean addAltSymbol(java.lang.String altSymbol)
Adds an alternate symbol which can be used at parse time. The alternate symbol added will be recognised at parse time by configurable parser the normal symbol will be used in output. For example unicode U+002D the hyphen minus (-), U+2212 the unicode minus symbol (−), U+2013 then en-dash (–) may appear in some input to represent minus. Other alternate characters include U+2264 less-than or equals (≤), U+2264 greater-than or equals (≥), U+2215 unicode division symbol (∕), U+00D7 multiplication (×).

Parameters:
altSymbol -
Returns:
true


Copyright © 2010 Singular Systems http://www.singularsys.com/jep