// Copyright (C) 2023, Jakob Wakeling // All rights reserved. #ifndef ESH_PARSE_H_EQMN0ZSE #define ESH_PARSE_H_EQMN0ZSE #include "lex.h" #include "util/stack.h" /* Remember to update ast_ks in parse.c */ typedef enum { AK_VOID, AK_COMM, AK_PIPE, } ast_k; /* k : Kind, s : String, lc : Left Child, rc : Right Child, c : Children */ typedef struct ast_s { ast_k k; char *s; struct ast_s *lc, *rc; stack c; struct { char *s; } rin; /* stdin redirect */ struct { char *s; bool app; } rout; /* stdout redirect */ struct { char *s; bool app; } rerr; /* stderr redirect */ } ast; extern char *ast_ks[]; extern ast *ast_init(ast_k kind); extern void ast_free(ast *a); extern ast *parse(lex *l); extern void ast_debug(ast *a, u64 indent); #endif // ESH_PARSE_H_EQMN0ZSE