Closed JaeSeoKim closed 3 years ago
ast 데이터를 저장하기 위한 구조체
type를 통해서 간단하게 데이터를 구분하고 data를 해당 데이터로 casting해서 사용하는 형태는 어떤가요?
typedef struct s_AST
{
int type;
void *data;
} t_AST;
위예 대한 예시 입니다!
t_AST *cmds = parse_cmd(?);
if (cmds->type == CMD)
excute_cmd(cmds->data);
FT_
를 추가하여서 정의할 것!cmd와 arg에 대한 type과 각 type에 대한 define 입니다!
# define FT_ARG_NORMAL 1
# define FT_ARG_QUOTE 2
# define FT_ARG_QUOTES 3
typedef struct s_arg
{
int type;
char *data;
} t_arg;
# define FT_CMD 1
typedef struct s_cmd
{
char *cmd;
t_arg *args;
} t_cmd;
pipe에 대한 구조체에 대한 임시 예제 입니다!
좋은 구조체 이름을 고민해봐요~!!
# define FT_PIPE 2
typedef struct s_pipe
{
t_AST *left;
t_AST *right;
} t_pipe;
redirection 구조체에 대한 임시 예제입니다!
# define FT_FD_IN 1
# define FT_FD_OUT 2
# define FT_FD_APPEND 3
# define FT_FD_HEREDOC 4
typedef struct s_redirect
{
int type;
char *cmd;
char *file;
} t_redirect;
condition 구조체에 대한 임시 예제입니다!
# define FT_OR 1
# define FT_AND 2
typedef struct s_cond
{
int type;
t_AST *left;
t_AST *right;
} t_cond;
구조체 일단 정의 완료!
파싱 과정에서 env 및 *에 대해 대치가 필요하므로 다시 고민을 해봐야 함!
@jyw2671 확인 부탁드려요!
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* minishell_type.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: jaeskim <jaeskim@student.42seoul.kr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2021/04/14 12:34:36 by jaeskim #+# #+# */
/* Updated: 2021/04/15 22:18:38 by jaeskim ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef MINISHELL_TYPE_H
# define MINISHELL_TYPE_H
/*
** t_AST type define
**
** FT_CMD -> t_cmd
** FT_PIPE -> t_pipe
** FT_REDIRECT -> t_redirect
** FT_CONDITION -> t_cond
*/
# define FT_CMD 1
# define FT_PIPE 2
# define FT_REDIRECT 3
# define FT_CONDITION 4
typedef struct s_AST
{
int type;
void *data;
struct s_AST *next;
} t_AST;
typedef struct s_cmd
{
char *cmd;
char *args;
} t_cmd;
typedef struct s_pipe
{
t_AST *left;
t_AST *right;
} t_pipe;
/*
** t_redirect type define
**
** FT_FD_IN -> `<`
** FT_FD_OUT -> `>`
** FT_FD_APPEND -> `>>`
** FT_FD_HEREDOC -> `<<`
*/
# define FT_FD_IN 1
# define FT_FD_OUT 2
# define FT_FD_APPEND 3
# define FT_FD_HEREDOC 4
typedef struct s_redirect
{
int type;
char *cmd;
char *file;
} t_redirect;
/*
** t_cond type define
**
** FT_OR -> `||`
** FT_AND -> `&&`
*/
# define FT_OR 1
# define FT_AND 2
typedef struct s_cond
{
int type;
t_AST *left;
t_AST *right;
} t_cond;
#endif
cmd + args
) 를 저장하기 위한 구조체|
)를 저장하기 위한 구조체>
,<
,>>
,<<
)를 저장하기 위한 구조체&&
,||
)를 저장하기 위한 구조체이때 각 type를 구분하기 위한 define 매크로 정의 필요!