aboutsummaryrefslogtreecommitdiff
path: root/src/utils.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/utils.cc')
-rw-r--r--src/utils.cc34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/utils.cc b/src/utils.cc
index 4e2ed91..9a081f3 100644
--- a/src/utils.cc
+++ b/src/utils.cc
@@ -12,9 +12,9 @@ TokenType getTokenType(char tmp) {
} else {
switch ( tmp ) {
case '-':
- return TokenType::OPERATOR_PLUS;
- case '+':
return TokenType::OPERATOR_MINUS;
+ case '+':
+ return TokenType::OPERATOR_PLUS;
case '/':
return TokenType::OPERATOR_DIVIDE;
case '*':
@@ -33,6 +33,33 @@ TokenType getTokenType(char tmp) {
}
}
+PrecedenceLevel getPrecedence(TokenType token) {
+ switch ( token ) {
+ case TokenType::VALUE_NUMBER:
+ case TokenType::VALUE_IDENTIFIER: {
+ return PrecedenceLevel::FIRST;
+ }
+ case TokenType::OPERATOR_MINUS:
+ case TokenType::OPERATOR_PLUS: {
+ return PrecedenceLevel::SECOND;
+ }
+ case TokenType::OPERATOR_DIVIDE:
+ case TokenType::OPERATOR_MULTIPLY: {
+ return PrecedenceLevel::THIRD;
+ }
+ case TokenType::OPERATOR_POWER: {
+ return PrecedenceLevel::FOURTH;
+ }
+ case TokenType::PARENTHESES_OPEN:
+ case TokenType::PARENTHESES_CLOSE: {
+ return PrecedenceLevel::FIFTH;
+ }
+ default: {
+ return PrecedenceLevel::FIRST;
+ }
+ }
+}
+
std::vector<std::string> lexer(std::string term) {
std::string tmp;
std::string tmpNumber;
@@ -55,7 +82,8 @@ std::vector<std::string> lexer(std::string term) {
if ( level > 0 ) {
tmp += *termIter;
} else {
- if ( token == TokenType::VALUE_NUMBER ) {
+ if ( token == TokenType::VALUE_NUMBER ||
+ token == TokenType::OPERATOR_MINUS ) {
tmpNumber += *termIter;
} else if ( token == TokenType::VALUE_IDENTIFIER ) {
tmpIdentifier += *termIter;