01234567891011121314151617181920212223242526272829303132
|
// 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
|