-
CommandLineParsers- набор парсеров для разбора входной строки. Содержит главный методparse, который запускает цепочку парсеров на входной строке для ее разбора. Возвращает в качестве результата разобранную строку, представленную в виде узла AST -Composition.У нашего AST существуют следующие виды узлов:
Composition- представляет цепочкуExpression, соединенных оператором композиции. Иными словами - конвеер команд.Expression-AssignmentилиApplication.Assignment- представляет оператор присваивания=.Application- представляет команду с аргументами.
Block- представляет цепочкуUnit.Unit-LiteralилиSubstitution.Literal- последовательность символов, никак не интерпретируется.Substitution- представляет оператор подстановки$.
-
CommandLineInterpreter- интерпретатор AST. Хранит в себе контекст выполнения -environment, а также всю информацию о том, каким образом выполнять ту или иную команду. Таким образом, для того чтобы добавить новую команду, достаточно реализовать метод-обработчик для этой команды и поместить его вызов в методevalобрабатывающийApplication- узел.На данный момент реализованы следующие команды:
cat [FILE]— вывести на экран содержимое файлов. Если ни одного аргумента не было передано, то читает данные из входного потока.echo— вывести на экран свой аргумент (или аргументы).wc [FILE]— вывести количество строк, слов и байт в каждом файле. Если ни одного аргумента не было передано, то читает данные из входного потока.pwd— распечатать текущую директорию.grep— выводит строки, отвечающие заданному регулярному выражению. Поддерживет следующие ключи:- -i — нечувствительность к регистру
- -w — поиск только слов целиком
- -A n — распечатать n строк после строки с совпадением
exit— завершить работу программы.
Помимо этого, операторы
=,$и|интерпретируются как полноценные команды с присущей им семантикой:variable = value- оператор присваивания. Записывает значение с именем переменной.$variable- оператор подстановки. Выполняет замену выражения на значение соответствующей переменной из контекста.command1 | command2- оператор конвеера. Перенаправляет выводcommand1на входcommand2.
Если входная строка содержит неизвестную команду, то интерпретатор запустит внешний процесс для того, чтобы делегировать ее выполнение операционной системе.
-
Объект
Main- точка входа в программу. В своем цикле он считывает очередную строку с консоли и пропускает ее через конвеер парсер-интерпретатор.
-
Notifications
You must be signed in to change notification settings - Fork 1
mchernyavsky/scala-cli
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
About
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published