// Copyright (C) 2023, Jakob Wakeling // All rights reserved. #ifndef ESH_LEX_H_Q5L6L9EM #define ESH_LEX_H_Q5L6L9EM #include "util/util.h" /* Remember to update tok_ks in lex.c */ typedef enum { TK_VOID, TK_EOF, TK_WORD, TK_END, TK_PIPE, TK_RIN, TK_ROUT, TK_RAPP, } tok_k; /* k : Kind, s : String */ typedef struct { tok_k k; char *s; } tok; /* s : Start of File, p : Current Character, q : End of File */ typedef struct { char *s, *p, *q; tok t; } lex; extern char *tok_ks[]; extern lex lex_init(char *src, u64 len); extern tok lex_peek(lex *l); extern tok lex_next(lex *l); extern void lex_debug(lex *l); #endif // ESH_LEX_H_Q5L6L9EM