From cab8b0c51c01d0cde056ffeb50c37c544df616ba Mon Sep 17 00:00:00 2001 From: guillm Date: Fri, 24 Apr 2026 21:17:10 +0200 Subject: [PATCH] doc: Update README --- README.md | 47 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index d3686bf..0b91b92 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ # 42sh - A POSIX shell with a bad name -42sh is a shcool project aiming to implement a POSIX compliant shell in C. +42sh is a project aiming to implement a POSIX-compliant shell written in C with only the standard library. +Source de is fully documented with the doxygen format so you can easily understand how the project works by exploring it. + +> **Note** This is a school project, therefore it probably won't interest you if you are looking for something useful. ## Getting started -TODO - ### Build run this command: `autoreconf --force --verbose --install` @@ -16,27 +17,43 @@ run this command: then: `make` -#### asan +#### Build with ASan run this command: `./configure CFLAGS='-std=c99 -Werror -Wall -Wextra -Wvla -g -fsanitize=address'` + or for MacOS (Jean Here): `./configure CFLAGS='-std=c99 -Werror -Wall -Wextra -Wvla -I/opt/homebrew/include' LDFLAGS='-L/opt/homebrew/lib'` - + then: `make check` +## Project status + +### Implemented features + +* **Command Execution:** `$PATH` search and binary execution (via `fork` and `execvp`) with error return code handling. +* **Built-ins:** Native implementation of `echo`, `cd`, `exit`, `export`, `unset`, `set`, `.`, `true`, `false`, as well as loop management with `break` and `continue`. +* **Control Structures:** * Conditions: `if / then / elif / else / fi`. + * Loops: `while`, `until` and `for`. +* **Logical Operators:** Command chaining with `&&`, `||` and negation with `!`. +* **Pipelines and Redirections:** * Full management of pipes `|` to connect the output of one process to the input of another. + * Single and multiple redirections: `>`, `<`, `>>`, `>&`, `<&`, `<>`. +* **Variables Management:** Assignment, variable expansion, and special variables handling like `$?` (return code of the last command). +* **Command Grouping:** Execution blocks `{ ... }` and subshells creation `( ... )`. +* **Quoting:** Support for weak (`"`) and strong (`'`) quoting for special characters escaping. + +## Architecture + +The shell operates on a classic compilation/interpretation pipeline: + +1. **Lexer (Lexical Analysis):** Reads standard input (or script) character by character and generates a stream of "Tokens" (Words, Operators, Redirections). +2. **Parser (Syntax Analysis):** Syntax analyzer that transforms the token stream into a complex Abstract Syntax Tree (AST). This module strictly manages the nesting of control structures and enforces the rigid grammar of the Shell Command Language. +3. **Execution (AST Traversal):** The tree is traversed recursively. Redirections modify file descriptors (`dup2`), child processes are created (`fork`), and commands are executed. + + ## Authors +- Guillem George - Matteo Flebus - Jean Herail - William Valenduc -- Guillem George - -## Project status - -WIP - -## TODO - -# Autotools -implement functions in all .c files to see if everything compiles.