summaryrefslogtreecommitdiff
path: root/preproc.h
diff options
context:
space:
mode:
authorÁkos Kőrösi <korakos99@gmail.com>2026-05-18 12:22:29 +0200
committerÁkos Kőrösi <korakos99@gmail.com>2026-05-18 12:22:29 +0200
commit7c69040ab68097811cb58e36a86b25a064e4c465 (patch)
tree2d029d6fed01080267206704285525b453d0dee7 /preproc.h
parent147d7ff68760f6f3ede56cb4e59af93d05daf56d (diff)
organizing
Diffstat (limited to 'preproc.h')
-rw-r--r--preproc.h76
1 files changed, 75 insertions, 1 deletions
diff --git a/preproc.h b/preproc.h
index 6dca467..1ba76cf 100644
--- a/preproc.h
+++ b/preproc.h
@@ -1,11 +1,85 @@
#pragma once
-#include "defs.h"
#include "utils.h"
+typedef struct Region Region;
+
+
+// Lexing stage
+typedef enum {
+ UN_Q,
+ SINGLE_Q,
+ DOUBLE_Q,
+} QuotationMode;
+
+typedef enum {
+ LITERAL,
+ REGION_EXP,
+ VAR_EXP, // TODO: Later include other exps
+} ChunkKind;
+
+typedef struct {
+ ChunkKind kind;
+ QuotationMode qmode;
+ union {
+ char* literal_str;
+ Region* reg_ptr;
+ char* varname;
+ } as;
+} Chunk;
+DECLARE_MAYBE(Chunk, MaybeChunk);
+DECLARE_VEC(Chunk*, Word)
+
+typedef enum {
+ TOK_WORD,
+ TOK_SPECIAL,
+ TOK_PROCSUB_IN,
+ TOK_PROCSUB_OUT,
+} TokenKind;
+
+typedef enum {
+ PIPE,
+ WRITE_REDIR_TRUNC,
+ WRITE_REDIR_APPEND,
+ READ_REDIR,
+ EOL,
+} SpecialToken;
+DECLARE_MAYBE(SpecialToken, MaybeSpecialToken)
+
+typedef struct {
+ TokenKind kind;
+
+ union {
+ Word word;
+ SpecialToken spec;
+ Region* procsub_region;
+ } as;
+} Token;
+
+
+DECLARE_VEC(Token*, TokenPtrVec)
+
+
+typedef enum {
+ CMDS,
+ ARITHM,
+} RegionMode;
+
+struct Region {
+ RegionMode mode;
+ TokenPtrVec tokens;
+};
+DECLARE_VEC(Region, RegionVec)
+
+
+
DECLARE_VEC(Chunk, ChunkVec)
DECLARE_VEC(Token, TokenVec)
+
+
+// Lexing
+
typedef struct {
RegionVec regions;
TokenVec tokens;