- Lexer
- Recognize tokens
- UnitTests
- Quotes mode
- Recognize tokens
- Parser
- Simple command
- UnitTests
- Pipeline
- UnitTests
- Simple command
- Executor
- Simple command
- Python tests
- Pipeline
- Python tests
- Simple command
| Token | Lexeme |
|---|---|
| BACKGROUND | & |
| SEQUENCE | ; |
| INPUT_REDIRECTION | < |
| OUTPUT_REDIRECTION | > |
| APPEND_REDIRECTION | >> |
| PIPE | | |
| LBRACKET | ( |
| RBRACKET | ) |
| AND | && |
| OR | || |
| WORD | everything else |
| Priority | Operator |
|---|---|
| 0 | () |
| 1 | | |
| 2 | < > >> |
| 3 | && || |
| 4 | ; & |
COMMAND_LINE -> SEQUENCE
| SEQUENCE ;
| SEQUENCE &
SEQUENCE -> SEQUENCE ; ANDOR
| SEQUENCE & ANDOR
| ANDOR
ANDOR -> ANDOR && COMMAND
| ANDOR || COMMAND
| COMMAND
COMMAND -> PIPELINE INPUT OUTPUT
INPUT -> < word
| e
OUTPUT -> > word
| >> word
| e
PIPELINE -> PIPELINE | SIMPLE_COMMAND
| SIMPLE_COMMAND
SIMPLE_COMMAND -> (SEQUENCE)
| word ARGS
ARGS -> ARGS word
| e
START ::= PIPELINE "\n"
PIPELINE ::= SIMPLE_COMMAND ("|" SIMPLE_COMMAND)*
SIMPLE_COMMAND ::= word (word)*