Другими словами CLI на вход принимает текстовые команды похожие на "move body forward 5m; status get distance forward_rangemeter;" на выходе выдаётся последовательность ORFA комманд.
К пониманию необходимости дополнительного уровня виртуализации меня привела разработка проекта OR-WiFiServer где для того чтобы подвигать сервами из какой либо web формы мне потребовалось сформировать поток команд ORFA.
При подходе "в лоб" изменении в аппаратной конфигурации (переставили сервы местами или подвинули) автоматически несут в себе необходимость изменения кода web управляющей программы - это не удобно.
Кроме того похожую задачу формирования набора ORFA последовательностей будут решать разработчики любых других управляющих воздействий - от ручного управления через ждойстик , визуальный секвенвесер , до программ ИИ.
Кроме прочего применение CLI позволит реализовать такие функции как защита аппаратной части от саморазрушения и виртуализация устройств (например на период отладки питаем модель от сети но запрос статуса заряда батареи работает в нормальном режиме.)
Так же CLI должна проверять как синтаксис подаваемых комманд (защита от хака ОС на которой работает CLI или ошибок программирования), так и применимость комманд согласно графу переходов состояний (нельзя выстрелить из пушки танка-модели если она не была заряжена).
Основное требование - CLI должен быть кросс платформенным в части исходного кода, вполне вероятно его выполнение как на разных ОС (win, linux, Mac OC X) так и на разных процессорах (x86 AVR ARM MIPS)
Для реализации грамотного подхода в программировании предлагаю стандартизовать такие вещи как синтаксис комманд и граф переходов состояний системы.
Синтаксис лучше всего описывать в стандарте [url=http://en.wikipedia.org/wiki/Backus–Naur_Form]BNF[/url]
Графы - пока не знаю
Да, ещё - не обязательно изобретать велосипед, если кто то знает аналогичный синтаксис, предлагайте , посмотрим на применимость для наших задач.
Чуть позже я начну писать исходный файл синтаксиса BNF
P.S. Прелесть BNF в том что из рего в автоматическом режиме можно строить документацию этот синтаксис описывающий для применения и так же автоматически строить парсеры-обработчики на С
==========================
обновляемый синтаксис BNF
- Код: Выделить всё
<command> ::= move <bodyobj> <lenobj> | get <sensobj> | set <exobj> | user <userobj>
<bodyobj> ::= body | leg[_l|_r]{<digit>} | arm[_l|_r]{<digit>}
<exobj> ::= motor[_l,_r]{<digit>}
<sensobj> ::= irsens[_l,_r]{<digit>}
<lenobj> ::= {<digit>}[mm|sm|m]
<userobj> ::= add <username> | del <username> | passwd <username> | auth <username> <password>
<username> ::= {<letter>|<digit>|_}
<password> ::= {<letter>|<digit>|_}
<digit> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
<letter> ::= a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z