summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorHombreLaser <sebastian-440@live.com>2022-03-26 13:18:12 -0600
committerHombreLaser <sebastian-440@live.com>2022-03-26 13:18:12 -0600
commitee0252298ab03c1647b7dcac302ac9fd4e7e8379 (patch)
tree12046727c686850d6cb95f77cd12790a1342137f /include
parentc11d390f07a663a939dd37a764ac755c37e4def3 (diff)
Añadido código del lexer
Diffstat (limited to 'include')
-rw-r--r--include/exceptions.hpp23
-rw-r--r--include/lexer.hpp28
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 */