Лабораторная работа №1.

Преамбула

Одним из старейших интерфейсов взаимодействия человека и компьютера является CLI (Command Line Interface), в рамках которого определяются базовые правила формирования команд компьютерной системе.

Задание

Рассмотрим упрощенные и несколько модифицированные правила формирования команд в CLI:
  1. Команда состоит только из набора латинских букв и цифр
  2. Команда может иметь параметры и опции
  3. Параметры и опции отделяются друг от друга и от команды произвольным кол-вом пробелов
  4. Лидирующие и завершающие пробелы в командной строке игнорируются
  5. Параметры могут содержать латинские буквы, цифры, знак подчеркивания, знак "\" и пробелы. Пробелы в параметрах могут эскейпироваться (предваряться знаком "\"). Параметр может обрамляться кавычками. Если параметр содержит неэскейпированные пробелы, он должен обрамляться кавычками
  6. Опции могут содержать латинские буквы и начинаются со знаков "-" или "/". Опция может быть пустой, т.е. состоять только из знака "-" или "/".
Создать программу, которая на стандартном входе принимает набор строк, а на выходе, при успешной обработке, для каждой исходной строки выводит символьный разделитель (напр. "----------------------------------------------------") и четыре блока, разделенных пустой строкой:
  1. исходную строку
  2. команду
  3. параметры по одному в каждой строке, экскейпированные пробелы выводятся как обычные пробелы
  4. опции по одной в каждой строке
Если введенная строка содержит ошибки, то на выходе программы три блока:
  1. исходная строка
  2. строка, содержащая символ "^" в позиции ошибки в исходной строке
  3. слово 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