Проект - система для управления клеточным роботом. Для управления роботом используется собственный интерпретируемый язык программирования. Робот перемещается в лабиринте MxN, структура которого описывается пользователем в отдельном текстовом файле.
В первой строке указываются размеры лабиринта,
maze 10 15
где 10 это размер лабиринта по горизонтали, а 15 - по вертикали. Во второй строке указывается изначальная позиция робота
robot 0 0
В данном примере робот будет находиться в левом нижнем углу лабиринта. Последующие строки показываются стены между клетками в лабиринте.
0 0 1 0
В данном примере указывается стена между левой нижней клеткой (0,0) и клеткой правее (1,0).
Разработка интерпретатора велась на языке Java 8. Для разработки языка использовалась библиотека ANTLR. Компиляция грамматики и сборка проекта осуществляется с помощью системы автоматической сборки Gradle.
После клонирования репозитория можно обнаружить, что некоторые java-классы не включены в репозиторий. Это классы, сгенерированные библиотекой ANTLR на одном из этапов сборки. Если собрать проект по следующей инструкции, то эти классы станут доступны для просмотра (но не рекомендуются для редактирования, так как содержат логику языка, описанного в файле грамматики).
- Для того, чтобы собрать проект, необходимо установить систему сборки Gradle. Кроме того, должна быть установлена Java не ниже 8й версии.
- После установки перейти в корневую директорию проекта и выполнить команду
gradle wrapper
- После выполнения этой команды в корневой директории появится скрипты gradlew и gradlew.bat (для UNIX систем и Windows соответственно)
- Для компиляции грамматики выполнить команду
./gradlew generateGrammarSource
- Для запуска программы выполнить команду, где newprog это файл с программой на собственном языке, othermaze это файл с описанием лабиринта
./gradlew run -PappArgs="['src/main/resources/newprog', 'src/main/resources/othermaze']"
Я рекомендую использовать среду разработки IntelliJ IDEA для изучения и выполнения проекта, данная среда обладает элементами пользовательского интерфейса для просмотра задач Gradle, просмотра грамматики (с установленным плагином для ANTLR) и отладки программы.
Язык был реализован в соответствии с заданием за некоторыми исключениями:
- Были добавлены встроенные функции printBool и printInt для вывода логических и целочисленных значений.
- Команды для робота были реализованы не как ключевые слова, а как встроенные функции. Встроенные функции не требуют какого-либо дополнительного объявления, они будут по умолчанию доступны из любой части программы, а их семантика идентична с любыми другими функциями языка. Добавить собственные встроенные функции можно в классе util.LanguageFunction
- Некоторые ключевые слова языка реализованы с нижним регистром, следует сверяться с файлом src/main/antlr/Robot.g4.