diff options
author | Anton Kling <anton@kling.gg> | 2023-11-17 23:58:14 +0100 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2023-11-17 23:58:14 +0100 |
commit | 01a9392ad6051878e217bffeffd6261ccf994c42 (patch) | |
tree | 17bb2d06531c32e17396ff6978983e133b79c6df /userland/minibox/utilities/sh/lexer.h | |
parent | 0c9282bb61b0d7c463045139655b3f1f1ec5422b (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.h | 24 |
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 |