diff --git a/src/utils/ast/ast.h b/src/utils/ast/ast.h index 49f0cf4..0924ab8 100644 --- a/src/utils/ast/ast.h +++ b/src/utils/ast/ast.h @@ -1,9 +1,10 @@ #ifndef AST_H #define AST_H -#include - -#include "../lists/lists.h" +#include "utils/ast/ast_command.h" +#include "utils/ast/ast_if.h" +#include "utils/ast/ast_list.h" +#include "utils/ast/ast_void.h" enum ast_type { @@ -13,18 +14,6 @@ enum ast_type AST_CMD }; -struct ast_cmd -{ - struct list *cmd; // A list of words (char*) -}; - -struct ast_if -{ - struct ast *condition; - struct ast *then_clause; - struct ast *else_clause; -}; - struct ast { enum ast_type type; @@ -38,58 +27,4 @@ struct ast void *data; }; -struct ast_list -{ - struct list *children; // A list of ASTs (ast*) -}; - -/** - * Checks if the given AST node is an if statement. - */ -bool ast_is_if(struct ast *node); - -/** - * Checks if the given AST node is a command. - */ -bool ast_is_cmd(struct ast *node); - -/** - * Checks if the given AST node is a command. - */ -bool ast_is_list(struct ast *node); - -/** - * Retrieves the if statement data from the given AST node. - * Assumes that the node is of type AST_IF. - */ -struct ast_if *ast_get_if(struct ast *node); - -/** - * Retrieves the command data from the given AST node. - * Assumes that the node is of type AST_CMD. - */ -struct ast_cmd *ast_get_cmd(struct ast *node); - -/** - * Retrieves the command data from the given AST node. - * Assumes that the node is of type AST_LIST. - */ -struct ast_list *ast_get_list(struct ast *node); - -/** - * Creates a new AST node representing an if statement. - */ -struct ast *ast_create_if(struct ast *condition, struct ast *then_clause, - struct ast *else_clause); - -/** - * Creates a new AST node representing a command. - */ -struct ast *ast_create_cmd(struct list *cmd); - -/** - * Creates a new AST node representing a list of ASTs - */ -struct ast* ast_create_list(struct list* ast_list); - #endif /* ! AST_H */ diff --git a/src/utils/ast/ast_command.h b/src/utils/ast/ast_command.h new file mode 100644 index 0000000..d95ad4c --- /dev/null +++ b/src/utils/ast/ast_command.h @@ -0,0 +1,30 @@ +#ifndef AST_COMMAND_H +#define AST_COMMAND_H + +#include + +#include "../lists/lists.h" +#include "utils/ast/ast.h" + +struct ast_cmd +{ + struct list *cmd; // A list of words (char*) +}; + +/** + * Checks if the given AST node is a command. + */ +bool ast_is_cmd(struct ast *node); + +/** + * Retrieves the command data from the given AST node. + * Assumes that the node is of type AST_CMD. + */ +struct ast_cmd *ast_get_cmd(struct ast *node); + +/** + * Creates a new AST node representing a command. + */ +struct ast *ast_create_cmd(struct list *cmd); + +#endif /* ! AST_COMMAND_H */ diff --git a/src/utils/ast/ast_if.h b/src/utils/ast/ast_if.h new file mode 100644 index 0000000..d470a92 --- /dev/null +++ b/src/utils/ast/ast_if.h @@ -0,0 +1,32 @@ +#ifndef AST_IF_H +#define AST_IF_H + +#include + +#include "utils/ast/ast.h" + +struct ast_if +{ + struct ast *condition; + struct ast *then_clause; + struct ast *else_clause; +}; + +/** + * Checks if the given AST node is an if statement. + */ +bool ast_is_if(struct ast *node); + +/** + * Retrieves the if statement data from the given AST node. + * Assumes that the node is of type AST_IF. + */ +struct ast_if *ast_get_if(struct ast *node); + +/** + * Creates a new AST node representing an if statement. + */ +struct ast *ast_create_if(struct ast *condition, struct ast *then_clause, + struct ast *else_clause); + +#endif /* ! AST_IF_H */ diff --git a/src/utils/ast/ast_list.h b/src/utils/ast/ast_list.h new file mode 100644 index 0000000..b733c54 --- /dev/null +++ b/src/utils/ast/ast_list.h @@ -0,0 +1,29 @@ +#ifndef AST_LIST_H +#define AST_LIST_H + +#include + +#include "utils/ast/ast.h" + +/** + * Creates a new AST node representing a list of ASTs + */ +struct ast *ast_create_list(struct list *ast_list); + +/** + * Retrieves the command data from the given AST node. + * Assumes that the node is of type AST_LIST. + */ +struct ast_list *ast_get_list(struct ast *node); + +/** + * Checks if the given AST node is a command. + */ +bool ast_is_list(struct ast *node); + +struct ast_list +{ + struct list *children; // A list of ASTs (ast*) +}; + +#endif /* ! AST_LIST_H */ diff --git a/src/utils/ast/ast_void.h b/src/utils/ast/ast_void.h new file mode 100644 index 0000000..62996fb --- /dev/null +++ b/src/utils/ast/ast_void.h @@ -0,0 +1,25 @@ +#ifndef AST_VOID_H +#define AST_VOID_H + +#include + +#include "utils/ast/ast.h" + +/** + * Checks if the given AST node is of type AST_VOID. + */ +bool ast_is_void(struct ast *node); + +/** + * Retrieves the if statement data from the given AST node. + * Assumes that the node is of type AST_VOID. + */ +struct ast_void *ast_get_void(struct ast *node); + +/** + * Creates a new AST node representing NOTHING + * WARNING: data will be a NULL pointer + */ +struct ast *ast_create_void(struct list *ast_list); + +#endif /* ! AST_VOID_H */