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

Преамбула

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

Задание

Рассмотрим упрощенные правила формирования команд в CLI:
  1. Команда состоит только из набора латинских букв
  2. Команда может иметь параметры и опции
  3. Параметры и опции отделяются друг от друга и от команды произвольным кол-вом пробелов
  4. Параметры могут содержать латинские буквы, цифры и пробелы. Параметр может обрамляться кавычками. Если параметр содержит пробелы, он должен обрамляться кавычками
  5. Опции могут содержать латинские буквы и начинаются со знаков "-" или "/".
Создать программу, которая на входе принимает строку, а на выходе выводит три блока, разделенных пустой строкой:
  1. команду,
  2. количество параметров и сами параметры по одному в каждой строке,
  3. количество опций и сами опции по одной в каждой строке.
Если введенная строка содержит ошибки, то на выходе программы - слово Error, номер ошибки и позиция ошибки в строке. Предлагается использовать следующий список ошибок:
1	- команда отсутствует
2	- команда содержит некорректные символы
3	- опция содержит некорректные символы
4	- параметр содержит некорректные символы
5	- параметр не содержит закрывающую кавычку
6	- параметры, опции и команды должны отделяться друг от друга пробелами
...
500	- общая ошибка (не входящая в список)
Примеры:
Исходная строка 1:

Результат 1:
Error 1 1

Исходная строка 2:
     test
Результат 2:
Error 1 1

Исходная строка 3:
test -h /h -h -f firstfile /help -suboption nextfile
Результат 2:
test

2
firstfile
nextfile

6
h
h
h
f
help
suboption

Исходная строка 4:
тест
Результат 4:
Error 2 1

Исходная строка 5:
copy abc.txt xyz.txt
Результат 5:
Error 4 9

Исходная строка 6:
copy "abc""xyz"
Результат 6:
Error 6 11

Исходная строка 7:
copy -h"abc  xyz"
Результат 7:
Error 6 8

Исходная строка 8:
mv abc xyz -f-b
Результат 8:
Error 6 14

Исходная строка 9:
copy "abc  xyz
Результат 9:
Error 5 15

Исходная строка 10:
xcopy /?
Результат 10:
Error 3 8