MCPcopy Create free account
hub / github.com/BZFlag-Dev/bzflag / infixToPrefix

Method infixToPrefix

src/common/StateDatabase.cpp:853–897  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

851
852
853StateDatabase::Expression StateDatabase::infixToPrefix(const Expression& infix) {
854 Expression postfix, prefix;
855 std::stack<ExpressionToken> operators;
856
857 for (Expression::const_iterator i = infix.begin(); i != infix.end(); i++) {
858 if ((i->getTokenType() == ExpressionToken::variable) ||
859 (i->getTokenType() == ExpressionToken::number)) {
860 postfix.push_back(*i);
861 }
862 else if (i->getTokenType() == ExpressionToken::oper) {
863 if (i->getOperator() == ExpressionToken::lparen) {
864 operators.push(*i);
865 }
866 else if (i->getOperator() == ExpressionToken::rparen) {
867 // unstack operators until a matching (is found
868 while ((operators.size() > 0) &&
869 (operators.top().getOperator() != ExpressionToken::lparen)) {
870 postfix.push_back(operators.top()); operators.pop();
871 }
872 // discard (
873 if (operators.size() > 0) { // handle extra-rparen case
874 operators.pop();
875 }
876 }
877 else {
878 while ((operators.size() > 0) &&
879 (operators.top().getPrecedence() < i->getPrecedence()) &&
880 (operators.top().getOperator() != ExpressionToken::lparen)) {
881 postfix.push_back(operators.top()); operators.pop();
882 }
883 operators.push(*i);
884 }
885 }
886 }
887
888 while (operators.size() > 0) {
889 postfix.push_back(operators.top()); operators.pop();
890 }
891
892 for (Expression::reverse_iterator ri = postfix.rbegin(); ri != postfix.rend(); ri++) {
893 prefix.push_back(*ri);
894 }
895
896 return prefix;
897}
898
899
900float StateDatabase::evaluate(Expression e) {

Callers

nothing calls this directly

Calls 12

getTokenTypeMethod · 0.80
getOperatorMethod · 0.80
pushMethod · 0.80
topMethod · 0.80
popMethod · 0.80
getPrecedenceMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
push_backMethod · 0.45
sizeMethod · 0.45
rbeginMethod · 0.45
rendMethod · 0.45

Tested by

no test coverage detected