diff options
Diffstat (limited to 'src/tokenizer.cpp')
| -rw-r--r-- | src/tokenizer.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index a32879e..a010703 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -1,4 +1,5 @@ #include "tokenizer.h" +#include <iostream> #include <stdexcept> namespace TehJSON @@ -16,6 +17,7 @@ namespace TehJSON case TokenType::StringLit: return "StringLit"; case TokenType::IntLit: return "IntLit"; case TokenType::FloatLit: return "FloatLit"; + case TokenType::BoolLit: return "BoolLit"; } } @@ -55,6 +57,7 @@ namespace TehJSON tokens.push_back({TokenType::StringLit, literalContent}); break; } + case '-': case '0' ... '9': { std::string literalContent{c}; pos++; @@ -78,6 +81,29 @@ namespace TehJSON tokens.push_back({isInt?TokenType::IntLit:TokenType::FloatLit, literalContent}); break; } + case 't': + { + if(input.at(++pos) != 'r'|| + input.at(++pos) != 'u'|| + input.at(++pos) != 'e') + { + throw std::runtime_error("Was expecting 'true' but got something else"); + } + tokens.push_back({TokenType::BoolLit, "true"}); + break; + } + case 'f': + { + if(input.at(++pos) != 'a'|| + input.at(++pos) != 'l'|| + input.at(++pos) != 's'|| + input.at(++pos) != 'e') + { + throw std::runtime_error("Was expecting 'false' but got something else"); + } + tokens.push_back({TokenType::BoolLit, "false"}); + break; + } case '{': tokens.push_back({TokenType::LBrace, std::string{c}}); break; case '}': tokens.push_back({TokenType::RBrace, std::string{c}}); break; case '[': tokens.push_back({TokenType::LSquare, std::string{c}}); break; |
