summaryrefslogtreecommitdiff
path: root/redes/lexparse.c
diff options
context:
space:
mode:
Diffstat (limited to 'redes/lexparse.c')
-rw-r--r--redes/lexparse.c48
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);
}