ESH

Executive Shell
git clone http://git.omkov.net/ESH
Log | Tree | Refs | README | Download

ESH/src/parse.h (33 lines, 775 B) -rw-r--r-- blame download

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