USGS

Isis 3.0 Object Programmers' Reference

Home

InfixToPostfix.h
Go to the documentation of this file.
1 
23 #ifndef INFIXTOPOSTFIX_H_
24 #define INFIXTOPOSTFIX_H_
25 
26 #include <stack>
27 #include <iostream>
28 
29 #include <QList>
30 #include <QString>
31 
32 namespace Isis {
33  class InfixOperator;
34  class InfixFunction;
35 
58  public:
60  virtual ~InfixToPostfix();
61 
62  QString convert(const QString &infix);
63  QString tokenizeEquation(const QString &equation);
64 
65  protected:
66 
67  virtual bool isKnownSymbol(QString representation);
68  virtual InfixOperator *findOperator(QString representation);
69 
70  QList<InfixOperator *> p_operators;
71 
72  private:
73  void initialize();
74  void uninitialize();
75 
76  QString formatFunctionCalls(QString equation);
77  QString cleanSpaces(QString equation);
78 
79  void closeParenthesis(QString &postfix, std::stack<InfixOperator> &theStack);
80  void addOperator(QString &postfix, const InfixOperator &op, std::stack<InfixOperator> &theStack);
81  bool isFunction(QString representation);
82  void checkArgument(QString funcName, int argNum, QString argument);
83  };
84 
92  class InfixOperator {
93  public:
94  InfixOperator(int prec, QString inString, bool isFunc = false) {
95  m_precedence = prec;
96  m_inputString = inString;
97  m_outputString = inString;
98  m_isFunction = isFunc;
99  }
100 
101  InfixOperator(int prec, QString inString, QString outString,
102  bool isFunc = false) {
103  m_precedence = prec;
104  m_inputString = inString;
105  m_outputString = outString;
106  m_isFunction = isFunc;
107  }
108 
109  const QString &inputString() const {
110  return m_inputString;
111  }
112 
113  const QString &outputString() const {
114  return m_outputString;
115  }
116 
117  int precedence() const {
118  return m_precedence;
119  }
120 
121  bool isFunction() const {
122  return m_isFunction;
123  }
124 
125 
126  private:
127  int m_precedence;
128  QString m_inputString;
129  QString m_outputString;
130  bool m_isFunction;
131  };
132 
133 
141  class InfixFunction : public InfixOperator {
142  public:
143  InfixFunction(QString inString, int argCount) :
144  InfixOperator(-1, inString, true) {
145  m_numArguments = argCount;
146  }
147 
148  InfixFunction(QString inString, QString outString, int argCount) :
149  InfixOperator(-1, inString, outString, true) {
150  m_numArguments = argCount;
151  }
152 
153  int argumentCount() const {
154  return m_numArguments;
155  }
156 
157  private:
158  int m_numArguments;
159  };
160 };
161 
162 #endif