Giter Club home page Giter Club logo

cli's Introduction

CLI

Перед запуском установите библиотеки:

pip install lark-parser==0.7.8
pip install parameterized

Запуск(из корневой директории): python main.py

Запуск тестов(из корневой директории): python -m unittest

Диаграмму классов можно найти по ссылке.

Детали реализации:

  1. Shell инкапсулирует в себе логику всего интерпретатора. Хранит:
    • Environment хранит состояние оболочки(переменные окружения и статус). Замечание: обращение к ранее неопределенной переменной считается ошибкой и прерывает исполнение текущей команды
    • HandlersNet инкапсурирует конвеер из Handler-ов, занимающихся всей обработкой
  2. Handler - абстрактный элемент конвеера, выполняющий обработку в методе run(request), после чего вызывается метод onFinish(result), извещающий остальные звенья конвеера
    • InputHandler считывает данные из входного потока
    • SubstitutionHandler парсит вход с помощью SubstitutionParser с целью выполнить подстановку(отператор $) и обрато собирает все в строку
    • ParserHandler парсит строку с помощью ShellParser и возвращает список команд
    • RunCommandsHandler запускает команды последовательно, перенаправляя через PIPE(|) потоки ввода и вывода для команд
    • OutputHandler печатает результат в выходной поток
  3. Парсеры используют библеотеку lark. Используются трансформеры для преобразования AST в нужные данные:
    • SubstitutionTransformer подменяет токен $name на значение соответствующей переменной из Environment
    • ShellTransformer преобразует AST в список команд, получая команды с помощью CommandFactory, которая по имени команды генерирует объект типа Command
  4. Command - абстрактный класс команды. При создании указывается список строковых аргументов. Вызов команды происходит методом execute, определяющим потоки ввода и вывода для команды. Поддерживаются следующие команды:
    • CatCommand: cat [FILE] - конкатинирует и выводит файлы, переданные в аргументах, если таких нет, перенаправляет поток входа дальше.
    • EchoCommand: echo [args] - печатает переданные аргументы, игнорирует входной поток
    • ExitCommand : exit - завершает shell, игнорирует аргументы и входной поток. Выставляет в Environment статус завершения
    • PwdCommand: pwd - печатает текущую директорию, игнорирует аргументы и входной поток
    • WcCommand: wc [FILE] или text | wc - считает количесво строк, слов и байт в файлах-аргументах(или во входном потоке, если нет аргументов). Выводит результат в формате: newlines = [N]; words = [N]; bytes = [N] [FILE], и если файлов несколько, последней строкой сумиирует результаты с меткой total
    • AssignmentCommand : var = string - присвоение значения в переменную, значением может быть только строка(не вызов команды)
    • GrepCommand - поиск шаблона в строке или файле.
    • CdCommand - изменяет текущую директорию.
    • LsCommand - список файлов в директории.
    • CustomCommand - при несовпадении имени команды с одиним из предыдущих вызывается команда, которая ищется в PATH или файловой системе

cli's People

Contributors

zuevmaxim avatar krock21 avatar

Watchers

James Cloos avatar  avatar

Forkers

krock21

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.