- Added Eval::getOperators to expose suported operator symbols.
This commit is contained in:
Paul Beckingham 2014-04-16 00:38:43 -04:00
parent fff1ae2d6e
commit bf30fb3085
2 changed files with 19 additions and 8 deletions

View file

@ -50,17 +50,17 @@ static struct
{ "_hastag_", 14, 'b', 'l'}, // +tag [Pseudo-op] { "_hastag_", 14, 'b', 'l'}, // +tag [Pseudo-op]
{ "_notag_", 14, 'b', 'l'}, // -tag [Pseudo-op] { "_notag_", 14, 'b', 'l'}, // -tag [Pseudo-op]
{ "*", 13, 'b', 'l' }, // Multiplication { "*", 13, 'b', 'l' }, // Multiplication
{ "/", 13, 'b', 'l' }, // Division { "/", 13, 'b', 'l' }, // Division
{ "%", 13, 'b', 'l' }, // Modulus { "%", 13, 'b', 'l' }, // Modulus
{ "+", 12, 'b', 'l' }, // Addition { "+", 12, 'b', 'l' }, // Addition
{ "-", 12, 'b', 'l' }, // Subtraction { "-", 12, 'b', 'l' }, // Subtraction
{ "<=", 10, 'b', 'l' }, // Less than or equal { "<=", 10, 'b', 'l' }, // Less than or equal
{ ">=", 10, 'b', 'l' }, // Greater than or equal { ">=", 10, 'b', 'l' }, // Greater than or equal
{ ">", 10, 'b', 'l' }, // Greater than { ">", 10, 'b', 'l' }, // Greater than
{ "<", 10, 'b', 'l' }, // Less than { "<", 10, 'b', 'l' }, // Less than
{ "=", 9, 'b', 'l' }, // Equal { "=", 9, 'b', 'l' }, // Equal
{ "==", 9, 'b', 'l' }, // Equal { "==", 9, 'b', 'l' }, // Equal
@ -73,8 +73,8 @@ static struct
{ "or", 4, 'b', 'l' }, // Disjunction { "or", 4, 'b', 'l' }, // Disjunction
{ "xor", 3, 'b', 'l' }, // Disjunction { "xor", 3, 'b', 'l' }, // Disjunction
{ "(", 0, 'b', 'l' }, // Precedence start { "(", 0, 'b', 'l' }, // Precedence start
{ ")", 0, 'b', 'l' }, // Precedence end { ")", 0, 'b', 'l' }, // Precedence end
}; };
#define NUM_OPERATORS (sizeof (operators) / sizeof (operators[0])) #define NUM_OPERATORS (sizeof (operators) / sizeof (operators[0]))
@ -171,6 +171,15 @@ void Eval::debug ()
_debug = true; _debug = true;
} }
////////////////////////////////////////////////////////////////////////////////
// Static.
void Eval::getOperators (std::vector <std::string>& all)
{
all.clear ();
for (unsigned int i = 0; i < NUM_OPERATORS; ++i)
all.push_back (operators[i].op);
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
void Eval::evaluatePostfixStack ( void Eval::evaluatePostfixStack (
const std::vector <std::pair <std::string, Lexer::Type> >& tokens, const std::vector <std::pair <std::string, Lexer::Type> >& tokens,

View file

@ -47,6 +47,8 @@ public:
void ambiguity (bool); void ambiguity (bool);
void debug (); void debug ();
static void getOperators (std::vector <std::string>&);
private: private:
void evaluatePostfixStack (const std::vector <std::pair <std::string, Lexer::Type> >&, Variant&) const; void evaluatePostfixStack (const std::vector <std::pair <std::string, Lexer::Type> >&, Variant&) const;
void infixToPostfix (std::vector <std::pair <std::string, Lexer::Type> >&) const; void infixToPostfix (std::vector <std::pair <std::string, Lexer::Type> >&) const;