---
# System prepended metadata

title: minishell parser

---

# minishell parser
bashと同じ機能を持つシェルを作成するために以下の関数と`struct command`を作成してください。

`parse`はシェルコマンドの文字列を入力として受け取り、パースした結果を`t_command`に格納して返してください。
```
typedef struct command t_command;
t_command *parse(char *s);
```

できる範囲でなるべく多くの
- metacharacter(| & ; ( ) < > space tab)
- control operator(|| & && ; ;; ( ) | |& <newline>)

に対応してください。

## 入力とパース結果の例
### `echo hello | cat`
```
[["echo", "hello"], ["cat"]]
```
### `echo "hello" | cat`
```
[["echo", "hello"], ["cat"]]
```
### `echo 'hello' | cat`
```
[["echo", "hello"], ["cat"]]
```
### `echo hello | cat | wc`
```
[["echo", "hello"], ["cat"], ["wc"]]
```
### `echo hello; ls | wc;`
```
[["echo", "hello"]]
[["ls"], ["wc"]]
```

### `echo hello "world" '42' | cat | wc`
```
[["echo", "hello", "world", "42"], ["cat"], ["wc"]]
```

### `echo "echo hello | cat" | cat`
```
[["echo", "echo \"hello\" | cat"], ["cat"]]
```
### `echo "echo 'echo hello | cat' | cat" | cat`
```
[["echo", "echo 'echo hello | cat' | cat"], ["cat"]]
```

### `echo "echo 'echo' 'hello' '|' 'cat' | cat" | cat`
```
[["echo", "echo 'echo' 'hello' '|' 'cat' | cat"], ["cat"]]
```
