Skip to content

mullerty/Robot_Interpretator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Robot_Interpretator

Система для управления клеточным роботом, осуществляющим передвижение по клеточному лабиринту. Клетка лабиринта имеет форму квадрата.

Робот может передвинуться в соседнюю клетку в случае отсутствия в ней препятствия.

Формальный язык для описания действий клеточного робота с поддержкой следующих литералов, операторов и предложений:

  •    Знаковые целочисленные литералы в десятичном формате;
    
  •    Логические литералоы TRUE и FALSE; логические константы и выражения преобразуются к знаковым целочисленным как 1 и 0 соответственно, обратное преобразование не определено;
    
  •    Объявление переменных в форматах:
    
  •    Целочисленная переменная со знаком INT <имя переменной> = <арифметическое выражение>;
    
  •    Логическая переменная BOOLEAN <имя переменной> = <логическое выражение>;
    
  •    Карта мира MAP <имя переменной>;
    
  •      Объявление констант в форматах:
    
  •    Целочисленная константа со знаком СINT <имя переменной> = <арифметическое выражение>;
    
  •    Логическая константа CBOOLEAN <имя переменной> = <логическое выражение>;
    

Применяется строгая типизация, если преобразование не определено и типы не совпадают, то это семантическая ошибка.

  •    Оператор присваивания ‘:=’;
    
  •    Арифметические операторы (результат инкремент/декремент первого операнда и возврат соответствующего значения):
    
  •    Инкремент значения целочисленной переменной INC <имя переменной | арифметическое выражение | вызов процедуры> <имя переменной | арифметическое выражение | вызов процедуры | целочисленный литерал | логическое выражение |TRUE | FALSE>
    
  •    Декремент значения целочисленной переменной DEC, аналогично INC.
    
  •    Логические операторы (результат логическое выражение):
    
  •    NOT <логическое выражение | вызов процедуры > ;
    
  •    OR <логическое выражение | вызов процедуры | TRUE | FALSE > <логическое выражение | вызов процедуры |TRUE | FALSE >;
    
  •    Операторы сравнения:
    
  •    GT  <арифметическое выражение> <арифметическое выражение>;
    
  •    LT <арифметическое выражение> <арифметическое выражение>;
    

(все операторы для записи выражений равноприоритетны; операторные скобки не используются; см. обратная польская запись).

  •    Операторы цикла  WHILE <логическое выражение> DO <предложение языка / группа предложений>
    
  •    объединение предложений в группы с помощью скобок ( );
    
  •    Условные операторы  IF <логическое выражение> <предложение языка / группа предложений> с поддержкой ELSE <предложение языка / группа предложений>;
    
  •    Операторы управления роботом
    
  •    перемещение робота на одну клетку в заданном направлении относительно текущего STEP. Если оператор невозможно выполнить из-за наличия препятствия, он возвращает логическое значение FALSE. Иначе – TRUE.
    
  •    Поворот робота BACK, RIGHT, LEFT. После выполнения оператора робот разворачивается в указанном направлении относительно текущего/
    
  •    Измерение расстояния до первого препятствия LOOK, возвращает количество клеток до ближайшего препятствия в текущем направлении.
    
  •    Описатель процедуры
    
  •    PROC имя процедуры [имена переменных разделенных пробелом] группа предложений языка, типы переменных выводятся из их объявления в теле процедуры. Процедура является отдельной областью видимости, параметры передаются в функцию по ссылке, т.е. через них происходит также возврат результата. Процедура может быть объявлена в любом месте программы, при объявлении она не выполняется.
    
  •    Оператор вызова процедуры
    
  •    имя процедуры [имена переменных разделенных пробелом], вызов процедуры может быть в любом месте программы поле ее объявление, при вызове процедуры в выражениях в качестве результата используется первый из параметров подходящего типа, неявное преобразование типов в этом случае не производится.
    
  •    Для работы с картами используются операторы с форматом вызова в виде вызова процедуры с четырьмя параметрами:  переменная результата, имя карты, координата по X, координата по Y:
    
  •    BAR – проверить наличие препятствия в клетке;
    
  •    EMP – проверить отсутствие препятствия в клетке;
    
  •    SET – установить препятствие в клетку (1) или определить, что ячейка свободна;
    
  •    CLR – сбросить ячейку в неопределенное состояние;
    

Предложение языка завершается символом перевода строки. Язык является регистронезависимым, т.е. INT = int = InT = …

С помощью lex и yacc осуществлен интерпретатор разработанного языка.

На разработанном формальном языке написана программа для поиска роботом выхода из лабиринта. Описание лабиринта и начальное положение робота задается в текстовом файле.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages