Skip to content

Latest commit

 

History

History
52 lines (40 loc) · 5.59 KB

FULL_DESCRIPTION.MD

File metadata and controls

52 lines (40 loc) · 5.59 KB

Software Design — CLI

CLI - Command-line Interface

Shell

Класс Shell реализует интерфейс взаимодействия с пользователем. Считывает введённые с клавиатуры команды и выводит результат их работы на экран. Класс так же передаёт сырые входные данные парсеру, а затем принимает решения о вызове необходимых пользователю функций.

Parser

Класс Parser с помощью детерминированного конечного автомата разбирает входную последовательность символов, составляя из неё команду, которую необходимо выполнить, и список агрументов этой команды. Автомат имеет 4 состояния — обычное состояние, состояние внутри двойных кавычек, состояние внутри одинарных кавычек, и состояние, в котором ведётся поиск переменной, для которой необходимо выполнить подстановку. Переходя между состояниями мы собираем по одному символу название команды — и её аргументы. Так же в процессе разбора входной строки происходит подстановка ($variable) и определение, является ли входная строка операцией присваивания.

Environment

Класс Environment хранит в себе переменные среды (сохранённые туда в течение этого запуска консоли), а так же предоставляет к ним доступ для других функций.

RawCommandData

Класс RawCommandData хранит имя консольной команды и список её аргументов.

Command

Интерфейс Сommand представляет основу для создания консольных команд для этого CLI и определяет сигнатуру метода запуска операций. Каждая из операций принимает на вход входной поток, из которого может взять дополнительные данные для своего выполнения. Так же каждая операция записывает свои результаты в выходной поток и возвращает его, как результат своей работы.

Assignment

Операция присваивания (вида x=10). Имя переменной операция берёт из первого аргумента. Значение переменной из второго своего аргумента. Операция записывает переменную с полученными именем и значением, как переменную среды CLI.

Cat

Операция читает данные и выводит их назад в выходной поток. Если первый аргумент присутствует — то операция пытается найти файл с таким именем и прочитать его. Если же аргументов нет — то Сat читает данные из входного потока и выводит их в выходной поток.

Echo

Данная операция выводит в выходной поток список всех своих аргументов, соединённых пробелом.

Exit

Данная операция передаёт сигнал Shell, чтобы она завершила выполнение операций после выполнения операции Exit. После этого Shell не ждёт никакого ввода от пользователя и завершается.

ExternalProcess

В случае, если Shell не находит операции, которую запросил пользователь, среди списка поддерживаемых — то она пытается вызвать эту операцию, как внешний процесс. Данный класс обеспечивает связывание потоков Shell и внешнего процесса.

Pwd

Данная операция выводит в выходной поток текущую рабочую директорию, её абсолютный путь.

Wc

Данная операция определяет количество строк, слов и байт во входной информации. Если первый аргумент присутствует — то операция пытается найти файл с таким именем, прочитать его и определить необходимое из его содержимого, а затем записать полученную информацию в выходной поток. Если же аргументов нет — то Wc читает данные из входного потока и выведет информацию о количестве строк, слов и байт о ней в выходной поток.