diff options
author | HombreLaser <sebastian-440@live.com> | 2022-03-26 13:18:12 -0600 |
---|---|---|
committer | HombreLaser <sebastian-440@live.com> | 2022-03-26 13:18:12 -0600 |
commit | ee0252298ab03c1647b7dcac302ac9fd4e7e8379 (patch) | |
tree | 12046727c686850d6cb95f77cd12790a1342137f /include | |
parent | c11d390f07a663a939dd37a764ac755c37e4def3 (diff) |
Añadido código del lexer
Diffstat (limited to 'include')
-rw-r--r-- | include/exceptions.hpp | 23 | ||||
-rw-r--r-- | include/lexer.hpp | 28 |
2 files changed, 42 insertions, 9 deletions
diff --git a/include/exceptions.hpp b/include/exceptions.hpp new file mode 100644 index 0000000..0469784 --- /dev/null +++ b/include/exceptions.hpp @@ -0,0 +1,23 @@ +#include <string> +#ifndef EXCEPTIONS_H +#define EXCEPTIONS_H + +class Exception{ +private: + std::string error_msg; +public: + Exception(const std::string &error_msg); + std::string showMsg(); +}; + +class LexerException: public Exception{ +public: + LexerException(const std::string &error_msg): Exception(error_msg){} +}; + +class ParserException: public Exception{ +public: + ParserException(const std::string &error_msg): Exception(error_msg){} +}; + +#endif /* EXCEPTIONS_H */ diff --git a/include/lexer.hpp b/include/lexer.hpp index 8d0d826..e674999 100644 --- a/include/lexer.hpp +++ b/include/lexer.hpp @@ -7,7 +7,14 @@ #ifndef LEXER_H #define LEXER_H -const std::string EMPTY_STRING = ""; +enum function_name{ + sin, + cos, + tan, + csc, + sec, + ctg +}; enum token_type{ sum, @@ -17,29 +24,32 @@ enum token_type{ power, variable, number, - sin, - cos, - tan, function, left_parens, - right_parens + right_parens, + nil }; struct Token{ token_type type; std::string value; + Token(token_type type, std::string value) : type(type), value(value){} }; class Lexer{ private: + char var_name; std::string text; - size_t txt_ptr; + size_t current_char; Token current_token; - void setCurrentToken(Token val); + bool matchFunction(std::string function_name); + std::string createNumber(); public: - Lexer(std::string text); - void nextToken(); + Lexer(std::string text = {}); + void setText(std::string text); Token getCurrentToken(); + Token match(); + Token nextToken(); }; #endif /* LEXER_H */ |