Skip to content

NVIvanov/interpreter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

interpreter

Описание проекта

Проект - система для управления клеточным роботом. Для управления роботом используется собственный интерпретируемый язык программирования. Робот перемещается в лабиринте MxN, структура которого описывается пользователем в отдельном текстовом файле.


Пример описания лабиринта

В первой строке указываются размеры лабиринта,

maze 10 15

где 10 это размер лабиринта по горизонтали, а 15 - по вертикали. Во второй строке указывается изначальная позиция робота

robot 0 0

В данном примере робот будет находиться в левом нижнем углу лабиринта. Последующие строки показываются стены между клетками в лабиринте.

0 0 1 0

В данном примере указывается стена между левой нижней клеткой (0,0) и клеткой правее (1,0).


Разработка интерпретатора велась на языке Java 8. Для разработки языка использовалась библиотека ANTLR. Компиляция грамматики и сборка проекта осуществляется с помощью системы автоматической сборки Gradle.

Сборка и запуск проекта

После клонирования репозитория можно обнаружить, что некоторые java-классы не включены в репозиторий. Это классы, сгенерированные библиотекой ANTLR на одном из этапов сборки. Если собрать проект по следующей инструкции, то эти классы станут доступны для просмотра (но не рекомендуются для редактирования, так как содержат логику языка, описанного в файле грамматики).


  1. Для того, чтобы собрать проект, необходимо установить систему сборки Gradle. Кроме того, должна быть установлена Java не ниже 8й версии.
  2. После установки перейти в корневую директорию проекта и выполнить команду
gradle wrapper
  1. После выполнения этой команды в корневой директории появится скрипты gradlew и gradlew.bat (для UNIX систем и Windows соответственно)
  2. Для компиляции грамматики выполнить команду
./gradlew generateGrammarSource
  1. Для запуска программы выполнить команду, где newprog это файл с программой на собственном языке, othermaze это файл с описанием лабиринта
./gradlew run -PappArgs="['src/main/resources/newprog', 'src/main/resources/othermaze']"

Я рекомендую использовать среду разработки IntelliJ IDEA для изучения и выполнения проекта, данная среда обладает элементами пользовательского интерфейса для просмотра задач Gradle, просмотра грамматики (с установленным плагином для ANTLR) и отладки программы.

Описание реализации языка

Язык был реализован в соответствии с заданием за некоторыми исключениями:

  1. Были добавлены встроенные функции printBool и printInt для вывода логических и целочисленных значений.
  2. Команды для робота были реализованы не как ключевые слова, а как встроенные функции. Встроенные функции не требуют какого-либо дополнительного объявления, они будут по умолчанию доступны из любой части программы, а их семантика идентична с любыми другими функциями языка. Добавить собственные встроенные функции можно в классе util.LanguageFunction
  3. Некоторые ключевые слова языка реализованы с нижним регистром, следует сверяться с файлом src/main/antlr/Robot.g4.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published