jxl.biff.formula.Operator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jxl Show documentation
Show all versions of jxl Show documentation
JExcelApi is a java library which provides the ability to read, write, and modify Microsoft Excel spreadsheets.
The newest version!
/*********************************************************************
*
* Copyright (C) 2002 Andrew Khan
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
***************************************************************************/
package jxl.biff.formula;
import java.util.Stack;
/**
* An operator is a node in a parse tree. Its children can be other
* operators or operands
* Arithmetic operators and functions are all considered operators
*/
abstract class Operator extends ParseItem
{
/**
* The items which this operator manipulates. There will be at most two
*/
private ParseItem[] operands;
/**
* Constructor
*/
public Operator()
{
operands = new ParseItem[0];
}
/**
* Tells the operands to use the alternate code
*/
protected void setOperandAlternateCode()
{
for (int i = 0 ; i < operands.length ; i++)
{
operands[i].setAlternateCode();
}
}
/**
* Adds operands to this item
*/
protected void add(ParseItem n)
{
n.setParent(this);
// Grow the array
ParseItem[] newOperands = new ParseItem[operands.length + 1];
System.arraycopy(operands, 0, newOperands, 0, operands.length);
newOperands[operands.length] = n;
operands = newOperands;
}
/**
* Gets the operands for this operator from the stack
*/
public abstract void getOperands(Stack s);
/**
* Gets the operands ie. the children of the node
*/
protected ParseItem[] getOperands()
{
return operands;
}
/**
* Gets the precedence for this operator. Operator precedents run from
* 1 to 5, one being the highest, 5 being the lowest
*
* @return the operator precedence
*/
abstract int getPrecedence();
}