Skip to content

DiSkills/DiSH

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

165 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DiSH is a simple command interpreter

C++ CMake GitHub-Actions

Tasks

  • Lexer
    • Recognize tokens
      • UnitTests
    • Quotes mode
  • Parser
    • Simple command
      • UnitTests
    • Pipeline
      • UnitTests
  • Executor
    • Simple command
      • Python tests
    • Pipeline
      • Python tests

Lexer

Token table

Token Lexeme
BACKGROUND &
SEQUENCE ;
INPUT_REDIRECTION <
OUTPUT_REDIRECTION >
APPEND_REDIRECTION >>
PIPE |
LBRACKET (
RBRACKET )
AND &&
OR ||
WORD everything else

Parser

Priority table

Priority Operator
0 ()
1 |
2 < > >>
3 && ||
4 ; &

Grammar

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

BNF

START ::= PIPELINE "\n"
PIPELINE ::= SIMPLE_COMMAND ("|" SIMPLE_COMMAND)*
SIMPLE_COMMAND ::= word (word)*

About

Resumed. DiSH is a simple command interpreter

Resources

Stars

Watchers

Forks

Used by

Contributors

Languages