diff options
Diffstat (limited to 'redes/lexparse.c')
| -rw-r--r-- | redes/lexparse.c | 48 |
1 files changed, 39 insertions, 9 deletions
diff --git a/redes/lexparse.c b/redes/lexparse.c index e064229..4b0fffc 100644 --- a/redes/lexparse.c +++ b/redes/lexparse.c @@ -98,7 +98,13 @@ static MaybeSpecialToken recognize_spec_token(char* line, size_t* pos) { switch (line[*pos]) { case '|': (*pos)++; - return (MaybeSpecialToken){.some = true, .value = SPEC_PIPE}; + return (MaybeSpecialToken){ + .some = true, + .value = (SpecialToken){ + .kind = SPEC_OP, + .as.op = OP_PIPE, + } + }; case '>': next_ch = line[(*pos)+1]; switch (next_ch) { @@ -106,10 +112,22 @@ static MaybeSpecialToken recognize_spec_token(char* line, size_t* pos) { return (MaybeSpecialToken){.some = false}; case '>': *pos += 2; - return (MaybeSpecialToken){.some = true, .value = SPEC_REDIR_W_APPEND}; + return (MaybeSpecialToken){ + .some = true, + .value = (SpecialToken){ + .kind = SPEC_OP, + .as.op = OP_REDIR_W_APPEND, + } + }; default: (*pos)++; - return (MaybeSpecialToken){.some = true, .value = SPEC_REDIR_W_TRUNC}; + return (MaybeSpecialToken){ + .some = true, + .value = (SpecialToken){ + .kind = SPEC_OP, + .as.op = OP_REDIR_W_TRUNC, + } + }; } case '<': next_ch = line[(*pos)+1]; @@ -117,7 +135,13 @@ static MaybeSpecialToken recognize_spec_token(char* line, size_t* pos) { return (MaybeSpecialToken){.some = false}; } else { (*pos)++; - return (MaybeSpecialToken){.some = true, .value = SPEC_REDIR_R}; + return (MaybeSpecialToken){ + .some = true, + .value = (SpecialToken){ + .kind = SPEC_OP, + .as.op = OP_REDIR_R, + } + }; } default: return (MaybeSpecialToken){.some = false}; @@ -157,8 +181,11 @@ TokenVec* lex_level(char* line, size_t* pos, char until, TokenVecVec* tok_seq_po TokenVec* sub_toks = lex_level(line, pos, ')', tok_seq_pool); (*pos)++; push_to_TokenVec(&tokens, (Token){ - .kind = TOK_SUB_IN, - .as.procsub_token_vec = sub_toks + .kind = TOK_SPEC, + .as.spec = (SpecialToken){ + .kind = SPEC_SUB_IN, + .as.proc_sub_region = sub_toks + } }); } else if (line[*pos] == '>' && line[(*pos)+1] == '(') { *pos += 2; @@ -169,8 +196,11 @@ TokenVec* lex_level(char* line, size_t* pos, char until, TokenVecVec* tok_seq_po TokenVec* sub_toks = lex_level(line, pos, ')', tok_seq_pool); (*pos)++; push_to_TokenVec(&tokens, (Token){ - .kind = TOK_SUB_OUT, - .as.procsub_token_vec = sub_toks + .kind = TOK_SPEC, + .as.spec = (SpecialToken){ + .kind = SPEC_SUB_OUT, + .as.proc_sub_region = sub_toks + } }); } else { push_to_String(&buf.lit_germ, line[(*pos)++]); @@ -182,7 +212,7 @@ TokenVec* lex_level(char* line, size_t* pos, char until, TokenVecVec* tok_seq_po } if (until == '\0') { - push_to_TokenVec(&tokens, (Token){.kind = TOK_SPEC, .as.spec = SPEC_EOL}); + push_to_TokenVec(&tokens, (Token){.kind = TOK_SPEC, .as.spec = (SpecialToken){.kind = SPEC_OP, .as.op = OP_EOL}}); } return push_to_TokenVecVec(tok_seq_pool, tokens); } |
