#include "typeutils.h" #include "lex.h" DECLARE_VEC(char*, StrVec) typedef struct { TokenVec tokens; size_t pos; } TokStream; typedef enum { STDIN_REDIR, STDOUT_REDIT, } RedirKind; typedef struct { RedirKind kind; union { char* std_redir_filename; } as; } Redirect; DECLARE_VEC(Redirect, RedirectVec) typedef struct { StrVec args; RedirectVec redirects; // TODO: prefix variable settings } Command; typedef enum { CONN_PIPE, CONN_EOL, // TODO: add the |& thingy } Connector; typedef struct { Command cmd; Connector conn; } PipelineElement; DECLARE_VEC(PipelineElement, Pipeline) Command parse_command(TokStream* toks) { StrVec args = make_StrVec(256); RedirectVec redirects = make_RedirectVec(256); for ( Token curr_tok; (curr_tok = toks->tokens.items[toks->pos], !(curr_tok.kind == TOK_SPECIAL && (curr_tok.as.spec == PIPE && curr_tok.as.spec == EOL))); toks->pos++ ) { if (curr_tok.kind == TOK_SPECIAL) { } } } Pipeline parse_tokstream(TokenVec toks) { TokStream tokstream = {.tokens = toks, .pos = 0}; Pipeline result = make_Pipeline(256); }