Master писал(а):4. Где писать >>?
по поводу писать, структура скрипта в некотором смысле похожа на Си, я хотел сделать скрипт таким что бы его легко было перенести на реальную железячную платформу, ну скажем на AVR. Так что бы изменение конфигурации робота в железе не влияло на скрипт не коем образом. Решил что нужно выделить внутри платформы модули, сиречь инкапсулированные объекты - интерфейс которых посылка двоичной команды и параметра если таковой имеется у команды. Команда предваряется ".", например .MOV, .ROT, .GET. Платформа посылает команду активному модулю, активизируется модуль, при помощи операции выбора @имя, сейчас доступны IRR, ENG (соотвественно @IRR, @ENG). Передали фокус например двигателям @ENG и дальше общаемся с ним посредством команд .MOV или .ROT. Модуль может вернуть значение, возвращает он его в поток - я пока еще не утвердился в мысле сделать поток стеком или просто ячейкой. Если поток стек то работаем с ним через ПОЛИЗ. Честно говоря не знаю надо это или нет и вообще в каком случае логика работы может потребовать арифметики.
Операторы определения метки - "метка:" определяют метку в скрипте, на которую потом производится переход.
Переход на метку ":метка".
Оператор сравнения ? = val, всегда сравнивает содержимое потока с значением val и если условие верно -пропускает команду ниже оператора условия.
{...} Имя - именованный список действий (список команд) по сути процедура, которую потом можно вызывать по имени.
Процедура которая получает исполнение первой это main как в Си, т.е. имя main зарезервировано.
- Код: Выделить всё • Развернуть
{
S0:
SeekWall
? = 1
:S0
S1:
SeekDoor
@ENG
.MOV 1
.ROT -90
:S1
} main
# Действия характеризуются списком комманд и модулей
{
@ENG
.MOV 1
@IRR
.GET
} SeekWall
{
CH:
@IRR
.GET
? = 1
:EX
@ENG
.ROT 90
:CH
EX:
} SeekDoor