📄 d_expsym.h
字号:
#ifndef INFIX_SYMBOLS
#define INFIX_SYMBOLS
// a class that maintains the precedence of symbols
class expressionSymbol
{
public:
expressionSymbol();
// default constructor
expressionSymbol(char ch);
// initializes the object for operator ch
friend bool operator>= (const expressionSymbol& left,
const expressionSymbol& right);
// return true if stackPrecedence of left is
// >= inputPrecedence of right. determines whether
// operator left on the stack should be output before
// pushing operator right on the stack
char getOp() const;
// return operator
private:
char op;
// operator
int inputPrecedence;
// input precedence of op
int stackPrecedence;
// stack precedence of op
};
// default constructor
expressionSymbol::expressionSymbol()
{}
// constructor that assigns operator and precedence values
expressionSymbol::expressionSymbol(char ch)
{
op = ch; // assign operator
switch(op)
{
// '+' and '-' have input/stack precedence 1
case '+':
case '-': inputPrecedence = 1;
stackPrecedence = 1;
break;
// '*', '%', and '/' have input/stack precedence 2
case '*':
case '%':
case '/': inputPrecedence = 2;
stackPrecedence = 2;
break;
// '^' is right associative. input precedence 4
// and stack precedence 3
case '^': inputPrecedence = 4;
stackPrecedence = 3;
break;
// '(' has input precendence 5, stack precedence -1
case '(': inputPrecedence = 5;
stackPrecedence = -1;
break;
// ')' has input/stack precedence 0
case ')': inputPrecedence = 0;
stackPrecedence = 0;
break;
}
}
char expressionSymbol::getOp() const
{
return op;
}
bool operator>= (const expressionSymbol& left, const expressionSymbol& right )
{
return left.stackPrecedence >= right.inputPrecedence;
}
#endif // INFIX_SYMBOLS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -