Лабораторная
работа №1.
Преамбула
Одним из старейших интерфейсов взаимодействия человека и компьютера является CLI (Command Line Interface),
в рамках которого определяются базовые правила формирования команд компьютерной системе.
Задание
Рассмотрим упрощенные и несколько модифицированные правила формирования команд в CLI:
- Команда состоит только из набора латинских букв и цифр
- Команда может иметь параметры и опции
- Параметры и опции отделяются друг от друга и от команды
произвольным кол-вом пробелов
- Лидирующие и завершающие пробелы в командной строке игнорируются
- Параметры могут содержать латинские буквы, цифры, знак подчеркивания, знак "\" и пробелы. Пробелы в параметрах могут эскейпироваться (предваряться знаком "\").
Параметр может обрамляться кавычками. Если
параметр содержит неэскейпированные пробелы, он должен обрамляться кавычками
- Опции могут содержать латинские буквы и начинаются со знаков
"-" или "/". Опция может быть пустой, т.е. состоять только из знака "-" или "/".
Создать программу, которая на стандартном входе принимает набор строк, а на выходе, при успешной обработке,
для каждой исходной строки выводит символьный разделитель (напр. "----------------------------------------------------")
и четыре блока, разделенных пустой строкой:
- исходную строку
- команду
- параметры по одному в каждой строке, экскейпированные пробелы выводятся как обычные пробелы
- опции по одной в каждой строке
Если введенная строка
содержит ошибки, то на выходе программы три блока:
- исходная строка
- строка, содержащая символ "^" в позиции ошибки в исходной строке
- слово Error, номер ошибки и номер позиции ошибки в исходной строке
Анализируется только первая ошибка.
Cписок ошибок:
1 - команда отсутствует
2 - команда содержит некорректные символы
3 - опция содержит некорректные символы
4 - параметр содержит некорректные символы
5 - параметр не содержит закрывающую кавычку
6 - параметры, опции и команды должны отделяться друг от друга пробелами
...
500 - общая ошибка (не входящая в список)
Пример исходного набора данных:
test
test -h /h -h -f firstfile /help -suboption nextfile
тест
copy abc.txt xyz.txt
copy "abc""xyz"
copy -h"abc xyz"
mv abc xyz -f-b
copy "abc xyz
xcopy /?
cp -f ____ " ab\c " c\ d\ e
Пример результирующего набора данных:
---------------------------
^
Error 1 1
---------------------------
test
test
---------------------------
test "\ 123" -h /h -h -f firstfile /help -suboption nextfile
test
123
firstfile
nextfile
-h
/h
-h
-f
/help
-suboption
---------------------------
тест
^
Error 2 1
---------------------------
copy abc.txt xyz.txt
^
Error 4 9
---------------------------
copy "abc""xyz"
^
Error 6 11
---------------------------
copy -h"abc xyz"
^
Error 6 8
---------------------------
mv abc xyz -f-b
^
Error 6 14
---------------------------
copy "abc xyz
^
Error 5 15
---------------------------
xcopy /?
^
Error 3 8
---------------------------
cp -f ____ " ab\c " c\ d\ e
cp
____
" ab\c "
c d e
-f