summaryrefslogtreecommitdiff
path: root/userland/minibox/utilities/sh/lexer.h
diff options
context:
space:
mode:
authorAnton Kling <anton@kling.gg>2023-11-17 23:58:14 +0100
committerAnton Kling <anton@kling.gg>2023-11-17 23:58:14 +0100
commit01a9392ad6051878e217bffeffd6261ccf994c42 (patch)
tree17bb2d06531c32e17396ff6978983e133b79c6df /userland/minibox/utilities/sh/lexer.h
parent0c9282bb61b0d7c463045139655b3f1f1ec5422b (diff)
Minibox: Add a somewhat improved shell
This shell actually lexes and produces a AST which makes it easier to add features and will makes it more difficult to introduce bugs. So basically it is just better code.
Diffstat (limited to 'userland/minibox/utilities/sh/lexer.h')
-rw-r--r--userland/minibox/utilities/sh/lexer.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/userland/minibox/utilities/sh/lexer.h b/userland/minibox/utilities/sh/lexer.h
new file mode 100644
index 0000000..57fb30b
--- /dev/null
+++ b/userland/minibox/utilities/sh/lexer.h
@@ -0,0 +1,24 @@
+#ifndef LEXER_H
+#define LEXER_H
+#include <stddef.h>
+
+typedef enum {
+ TOKEN_CHARS,
+ TOKEN_AND,
+ TOKEN_NOT,
+ TOKEN_NOOP,
+ TOKEN_PIPE,
+ TOKEN_STREAM,
+ TOKEN_STREAM_APPEND,
+} token_type_t;
+
+struct TOKEN {
+ token_type_t type;
+ char string_rep[256];
+ struct TOKEN *next;
+};
+
+struct TOKEN *lex(const char *code);
+struct AST *generate_ast(struct TOKEN *token);
+void free_tokens(struct TOKEN *token);
+#endif // LEXER_H