USGS

Isis 3.0 Object Programmers' Reference

Home

Isis::InfixToPostfix Class Reference
[Math]

#include <InfixToPostfix.h>

Inheritance diagram for Isis::InfixToPostfix:

Inheritance graph
[legend]
Collaboration diagram for Isis::InfixToPostfix:

Collaboration graph
[legend]
List of all members.

Detailed Description

Converter for math equations.

This class converts infix equations to postfix

Author:
2007-08-21 Steven Lambright

For internal use only.

History:
2007-08-22 Steven Lambright - Changed p_operators from vector to QList (static std::vector is unsafe)
History:
2008-01-23 Steven Lambright - Added the operators (constants) PI and e

Definition at line 49 of file InfixToPostfix.h.

Public Member Functions

 InfixToPostfix ()
 Constructor.
virtual ~InfixToPostfix ()
iString Convert (const iString &infix)
 This method converts infix to postfix.
iString TokenizeEquation (const iString &equation)
 This method will add spaces between all operators and numbers, making it possible to get each element of the equation one by one.

Protected Member Functions

virtual bool IsKnownSymbol (iString representation)
 This method will return true if it believes the argument represents a valid function or operator.
virtual InfixOperatorFindOperator (iString representation)
 This method will return a pointer to the operator represented by 'representation.

Protected Attributes

QList< InfixOperator * > p_operators

Private Member Functions

void Initialize ()
 This populates the known operators/functions list.
void Uninitialize ()
 This cleans the known operators/functions list.
iString FormatFunctionCalls (iString equation)
 This method looks through equation for function calls, parenthesizes them, and calls itself again with each argument in order to parse any embedded functions.
iString CleanSpaces (iString equation)
 This function takes a space-delimited string and removes empty delimiters.
void CloseParenthesis (iString &postfix, std::stack< InfixOperator > &theStack)
 This is straight from the algorithm found on page 159 of "Data Structures & Algorithms in Java" Second Edition by Robert Lafore.
void AddOperator (iString &postfix, const InfixOperator &op, std::stack< InfixOperator > &theStack)
 This is straight from the algorithm found on page 159 of "Data Structures & Algorithms in Java" Second Edition by Robert Lafore.
bool IsFunction (iString representation)
 This method will return true if 'representation' is a known function.
void CheckArgument (iString funcName, int argNum, iString argument)


Constructor & Destructor Documentation

Isis::InfixToPostfix::InfixToPostfix (  ) 

Constructor.

Definition at line 31 of file InfixToPostfix.cpp.

References Initialize().


Member Function Documentation

void Isis::InfixToPostfix::AddOperator ( iString postfix,
const InfixOperator op,
std::stack< InfixOperator > &  theStack 
) [private]

This is straight from the algorithm found on page 159 of "Data Structures & Algorithms in Java" Second Edition by Robert Lafore.

Parameters:
postfix The postix generated thus far
op The operator
theStack The operator stack

Definition at line 287 of file InfixToPostfix.cpp.

References Isis::InfixOperator::precedence, and top.

Referenced by Convert().

iString Isis::InfixToPostfix::CleanSpaces ( iString  equation  )  [private]

This function takes a space-delimited string and removes empty delimiters.

In order words, it compresses the spaces. This is used to keep strings small, clean, and remove the necessity to check for empty tokens constantly.

That is, if your string is "a b" the result will be "a b".

Parameters:
equation A space-delimited string with excessive spaces
Returns:
iString A space-delimited string with data between every pair of spaces

Definition at line 115 of file InfixToPostfix.cpp.

References clean(), and Isis::iString::Token().

Referenced by Convert(), FormatFunctionCalls(), and TokenizeEquation().

void Isis::InfixToPostfix::CloseParenthesis ( iString postfix,
std::stack< InfixOperator > &  theStack 
) [private]

This is straight from the algorithm found on page 159 of "Data Structures & Algorithms in Java" Second Edition by Robert Lafore.

Parameters:
postfix The postix generated thus far
theStack The operator stack

Definition at line 316 of file InfixToPostfix.cpp.

References _FILEINFO_, and Isis::iException::Message().

Referenced by Convert().

iString Isis::InfixToPostfix::Convert ( const iString infix  ) 

This method converts infix to postfix.

It uses an enhanced verion of the algorithm found on page 159 of "Data Structures & Algorithms in Java" Second Edition by Robert Lafore. First, we prep the equation with TokenizeEquation and then parse through it using the known-good algorithm.

Parameters:
infix The infix equation
Returns:
iString The postfix equation

Definition at line 144 of file InfixToPostfix.cpp.

References _FILEINFO_, AddOperator(), CleanSpaces(), Isis::iException::Clear(), CloseParenthesis(), e, FindOperator(), IsFunction(), IsKnownSymbol(), Isis::iException::Message(), Isis::iString::Remove(), Isis::iString::Token(), and TokenizeEquation().

InfixOperator * Isis::InfixToPostfix::FindOperator ( iString  representation  )  [protected, virtual]

This method will return a pointer to the operator represented by 'representation.

' Because in this model a function is an operator, this will return a pointer to functions as well (in a base class pointer).

Parameters:
representation The symbolic representation of the operator, such as '+'
Returns:
InfixOperator* A pointer to the operator object that contains known information about the operator

Reimplemented in Isis::CubeInfixToPostfix.

Definition at line 347 of file InfixToPostfix.cpp.

References _FILEINFO_, Isis::iException::Message(), and p_operators.

Referenced by Convert(), Isis::CubeInfixToPostfix::FindOperator(), FormatFunctionCalls(), and IsFunction().

iString Isis::InfixToPostfix::FormatFunctionCalls ( iString  equation  )  [private]

This method looks through equation for function calls, parenthesizes them, and calls itself again with each argument in order to parse any embedded functions.

This ensures order of operations holds for cases like sin(.5)^2. This method might add too many parentheses, but that is harmless. This does not affect operators (excepting --) or numbers. Only functions. The input should be space-delimited.

Parameters:
equation The unparenthesized equation
Returns:
iString The parenthesized equation

This code block is for multi-parameter functions. Functions with 1+ parameters are parsed here, excepting the negation (with no parentheses) which is done just above.

We figure out the arguments by looking for commas, outside of all parentheses, for each argument up until the last one. We look for an extra closing parenthesis for the last argument. When we figure out what an argument is, we recursively call FormatFunctionCalls to format any and all functionality inside of the argument.

Definition at line 470 of file InfixToPostfix.cpp.

References _FILEINFO_, CheckArgument(), CleanSpaces(), element, FindOperator(), IsFunction(), Isis::iException::Message(), Isis::InfixFunction::numArguments, Isis::InfixOperator::representation, and Isis::iString::Token().

Referenced by TokenizeEquation().

void Isis::InfixToPostfix::Initialize (  )  [private]

This populates the known operators/functions list.

If the operators list is not empty, this function will do nothing.

Definition at line 43 of file InfixToPostfix.cpp.

References p_operators.

Referenced by InfixToPostfix().

bool Isis::InfixToPostfix::IsFunction ( iString  representation  )  [private]

This method will return true if 'representation' is a known function.

Parameters:
representation The symbolic representation of a function, such as 'abs'
Returns:
bool True if it's a known function, false otherwise

Definition at line 270 of file InfixToPostfix.cpp.

References FindOperator(), Isis::InfixOperator::isFunction, and IsKnownSymbol().

Referenced by Convert(), and FormatFunctionCalls().

bool Isis::InfixToPostfix::IsKnownSymbol ( iString  representation  )  [protected, virtual]

This method will return true if it believes the argument represents a valid function or operator.

Parameters:
representation The symbolic representation of the operator, such as 'sin'
Returns:
bool True if it looks valid, false if it's not known

Reimplemented in Isis::CubeInfixToPostfix.

Definition at line 253 of file InfixToPostfix.cpp.

References p_operators.

Referenced by Convert(), and IsFunction().

iString Isis::InfixToPostfix::TokenizeEquation ( const iString equation  ) 

This method will add spaces between all operators and numbers, making it possible to get each element of the equation one by one.

It will also parse out the function calls, adding parenthesis where needed so the user doesn't have to. The result is an equation ready for parsing (but NOT fully parenthesized, just enough to make sure our algorithm makes no mistakes).

Parameters:
equation An unformatted infix equation
Returns:
iString A tokenized equation with additional parentheses

Definition at line 369 of file InfixToPostfix.cpp.

References CleanSpaces(), Isis::iString::DownCase(), and FormatFunctionCalls().

Referenced by Convert().

void Isis::InfixToPostfix::Uninitialize (  )  [private]

This cleans the known operators/functions list.

Definition at line 95 of file InfixToPostfix.cpp.

References p_operators.

Referenced by ~InfixToPostfix().


The documentation for this class was generated from the following files: