Это не столько компилятор, сколько интерпретатор / дизайнер. Но я отвлекся.
По сути, вас просят создать «язык команд рисования» и программу, которая может интерпретировать этот язык команд. Для примера того, что обычно должен делать «язык команд рисования», взгляните на LOGO .
Что вам нужно сделать, это определить простой набор инструкций (примитивов), которые в правильной комбинации приведут к рисованию фигуры. Вы также должны будете включить примитив, чтобы вращать форму. Вот определение Википедии «примитив» в соответствующем контексте. Делая это, вы создаете «язык» и «среду выполнения»; теоретически вы можете сохранить команды в файле, затем загрузить их в программу и повторно запустить, чтобы сгенерировать ту же форму.
Есть три основных способа, которыми вы могли бы пойти с этим:
Определите примитивы для рисования различных типов линий (прямые, изогнутые, сплошные, пунктирные и т. Д.) И задайте цвет, которым следует рисовать следующие линии. Скорее всего, вы создадите примитивы только для создания примитивов; вашими основными примитивами будут «Задать цвет» и «Рисовать линию».
Определение примитивов для рисования различных предварительно определенных фигур (линии, круга, прямоугольника, пятиугольника, шестиугольника и т. Д. И т. Д.). Это, вероятно, то, что будут делать ваши одноклассники, и это займет некоторое время и не будет очень функциональным.
Реализуйте "рисунок черепахи" так же, как ЛОГОТИП. Там будет курсор («черепаха»), который каким-то образом представлен на экране, и его текущее местоположение и куда он идет, является неотъемлемой частью рисования линий.
Лично мне нравится последняя идея; вам понадобятся примитивы для перемещения черепахи, для отметки начального и конечного положений линий, установки цветов, поворота, очистки и т. д .:
- MVUP x - Переместить черепаху вверх на x пикселей
- MVDN x - Переместить черепаху вниз на x пикселей
- MVLT x - Переместить черепаху влево на x пикселей
- MVRT x - Переместить черепаху вправо на x пикселей
- SETC r g b - установить цвет рисования линий на значение RGB
- STLN - отметить начало линии в позиции черепахи
- ENDL - отметить конец линии в положении черепахи; вызывает рисование линии от начала до конца с использованием текущего цвета.
- RTCL x - Поворот холста на x градусов по часовой стрелке (для этого требуется некоторая математическая математика, и вы потеряете все нарисованное, выпадающее из холста после поворота)
- RTCC x - Поворот холста x градусов против часовой стрелки (то же самое)
- CNTR - Поместите черепаху в самый центр холста. Полезно при определении начальной позиции, с которой нужно начинать, или во избежание изменения ряда сложных движений, чтобы вернуться в центр и снова нарисовать.
- CLRS - Удалить все нарисованные линии с панели. Это, наряду с CNTR, вероятно, должно быть первыми двумя командами в «программе» для рисования какой-либо конкретной фигуры, но если вы их опустите, программа может построить сам себя итеративно, запустившись поверх своего предыдущего вывода для создания фрактальных паттернов .
Я только что дал вам 11 примитивных команд, которые можно использовать для перемещения курсора с места на место на холсте, рисования линий по ходу и для рисования любой 2D-фигуры, которую пожелает пользователь. Вы также можете использовать правую модель с поворотом вперед-назад-вправо, как если бы черепаха была роботом, но это, вероятно, сделало бы это более сложным, чем должно быть (помните YAGNI; он хорошо послужит вам в промышленности).
Если у вас есть язык, вы должны заставить его работать двумя способами; во-первых, программа должна знать, как интерпретировать инструкции, введенные в текстовое поле, чтобы нарисовать / перерисовать фигуру на блокноте для рисования, и, во-вторых, программа должна принять ввод с помощью мыши на панели рисования, интерпретировать эти команды как перемещение Черепаха / маркировка начала или окончания / настройки цветов, и введите команды в текстовое поле. Это ваш проект, и я оставляю его реализацию вам.