mirror of
https://codeberg.org/la-chouette/minishell.git
synced 2025-12-06 07:28:09 +01:00
command list parsing: handle empty input
This is really not that usefull, it is more to setup the groundwork
This commit is contained in:
parent
1c653d9665
commit
eb21f00156
5 changed files with 129 additions and 0 deletions
1
Makefile
1
Makefile
|
|
@ -26,6 +26,7 @@ srcs = \
|
|||
src/env/envp.c \
|
||||
src/ft_errno.c \
|
||||
src/get_command.c \
|
||||
src/parser/command_list/command_list.c \
|
||||
src/parser/matchers/blank.c \
|
||||
src/parser/matchers/identifier.c \
|
||||
src/parser/matchers/metacharacter.c \
|
||||
|
|
|
|||
25
src/parser/command_list/command_list.c
Normal file
25
src/parser/command_list/command_list.c
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* command_list.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: khais <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/02/24 17:49:46 by khais #+# #+# */
|
||||
/* Updated: 2025/02/24 17:51:25 by khais ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "command_list.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
t_command_list *command_list_from_wordlist(t_wordlist *words)
|
||||
{
|
||||
(void)words;
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
void command_list_destroy(t_command_list *cmd)
|
||||
{
|
||||
(void)cmd;
|
||||
}
|
||||
66
src/parser/command_list/command_list.h
Normal file
66
src/parser/command_list/command_list.h
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* command_list.h :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: khais <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/02/24 17:45:01 by khais #+# #+# */
|
||||
/* Updated: 2025/02/24 17:49:33 by khais ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#ifndef COMMAND_LIST_H
|
||||
# define COMMAND_LIST_H
|
||||
|
||||
# include "../wordlist/wordlist.h"
|
||||
/*
|
||||
** cf. 3.2.4 Lists of Commands
|
||||
**
|
||||
** A list is a sequence of one or more pipelines separated by one of the
|
||||
** **operators** ‘&&’, or ‘||’, and optionally terminated by a newline.
|
||||
**
|
||||
** AND and OR lists are sequences of one or more pipelines separated by the
|
||||
** control operators ‘&&’ and ‘||’, respectively.
|
||||
**
|
||||
** AND and OR lists are executed with left associativity.
|
||||
**
|
||||
** e.g.
|
||||
**
|
||||
** ```shell
|
||||
** A && B && C
|
||||
** ```
|
||||
**
|
||||
** is the same as
|
||||
**
|
||||
** ```shell
|
||||
** (A && B) && C
|
||||
** ```
|
||||
**
|
||||
** An AND list has the form
|
||||
**
|
||||
** ```shell
|
||||
** A && B
|
||||
** ```
|
||||
**
|
||||
** B is execute if and only if A has an exit status of 0 (succes).
|
||||
**
|
||||
** An OR list has the form
|
||||
**
|
||||
** ```shell
|
||||
** A || B
|
||||
** ```
|
||||
**
|
||||
** B is execute if and only if A has a non-zero exit status (failure).
|
||||
**
|
||||
** The return status of AND and OR lists is the exit status of the last command
|
||||
** executed in the list.
|
||||
*/
|
||||
typedef struct s_command_list
|
||||
{
|
||||
} t_command_list;
|
||||
|
||||
t_command_list *command_list_from_wordlist(t_wordlist *words);
|
||||
void command_list_destroy(t_command_list *cmd);
|
||||
|
||||
#endif // COMMAND_LIST_H
|
||||
|
|
@ -3,6 +3,7 @@
|
|||
rawtests = \
|
||||
quote_removal \
|
||||
metacharacters \
|
||||
parse_command_lists \
|
||||
parse_pipelines \
|
||||
parse_simple_cmds \
|
||||
test_env_manip \
|
||||
|
|
|
|||
36
tests/parse_command_lists.c
Normal file
36
tests/parse_command_lists.c
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* parse_command_lists.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: khais <marvin@42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2025/02/24 17:40:48 by khais #+# #+# */
|
||||
/* Updated: 2025/02/24 17:47:39 by khais ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "../src/parser/command_list/command_list.h"
|
||||
#include "../src/parser/wordsplit/wordsplit.h"
|
||||
#include <assert.h>
|
||||
|
||||
static t_command_list *parse_command_list(char *input)
|
||||
{
|
||||
t_wordlist *words = minishell_wordsplit(input);
|
||||
t_command_list *cmd = command_list_from_wordlist(words);
|
||||
return (cmd);
|
||||
}
|
||||
|
||||
|
||||
static void test_parse_command_list_empty(void)
|
||||
{
|
||||
t_command_list *cmd = parse_command_list("");
|
||||
assert(cmd == NULL);
|
||||
command_list_destroy(cmd);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
test_parse_command_list_empty();
|
||||
return (0);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue