###Cуть - был построен синтаксический анализатор языка MINC
Разработать транслятор с заданного по варианту языка программирования на язык Python. Сгенерированный код должен выполняться без ошибок интерпретатором Python версии 3.8 или выше.
Транслятор должен находить все виды лексических и синтаксических ошибок в исходном коде, а также некоторые виды семантических ошибок, таких как несоответствие типов (для статически типизированных языков), использование необъявленных переменных, некорректное использование зарезервированного ключевого слова, повторное объявление переменной и др.
Язык программирования, на котором ведется разработка транслятора, выбирается студентами самостоятельно и согласовывается с преподавателем. Рекомендуется использовать утилиты Flex
, Bison
или их аналоги для автоматической генерации кода лексического и синтаксического анализаторов.
По согласованию с преподавателем задание может быть упрощено с соответствующим снижением оценки.
- Выбор задания (входной и выходной языки), языка и среды разработки, формирование групп
- Описание грамматики входного языка
- Подготовка тестов
- Разработка лексического анализатора
- Разработка синтаксического анализатора (парсинг, построение дерева разбора)
- Разработка семантического анализатора
- Генерация кода, отладка
- Подготовка документации и защита проекта
Сроки выполнения этапов приведены в журнале учета успеваемости, доступном по ссылке в личном кабинете студента.
- Tiny BASIC: https://en.wikipedia.org/wiki/Tiny_BASIC#Formal_grammar
- COOL: http://theory.stanford.edu/~aiken/software/cool/cool-manual.pdf (page 16)
- MINC: https://web.archive.org/web/20050214051942/http://www.music.princeton.edu/winham/man/minc.html
- TIGER: http://www.cs.columbia.edu/~sedwards/classes/2002/w4115/tiger.pdf
- PCAT: http://web.cecs.pdx.edu/~apt/cs302_1999/pcat99/pcat99.html
- LUA: http://www.lua.org/manual/5.1/manual.html (в самом низу)
- Component Pascal: https://en.wikipedia.org/wiki/Component_Pascal
- Oberon-2: https://en.wikipedia.org/wiki/Oberon-2
- Ada/CS: https://ecommons.cornell.edu/handle/1813/7509
- C--: https://www2.cs.arizona.edu/~debray/Teaching/CSc453/DOCS/cminusminusspec.html
- µOCCAM: http://homepages.inf.ed.ac.uk/stark/ipp/manuals/moccam.pdf (Chapter 1, page 4)
- MLPolyR: https://people.cs.uchicago.edu/~blume/classes/spr2005/cmsc22620/docs/langspec.pdf (page 2)
- Decaf: https://parasol.tamu.edu/courses/decaf/students/decafOverview.pdf (page 3)
- TinyJava: http://cobweb.cs.uga.edu/~kochut/teaching/x570/tinyjava/tinyjava.html
- MiniJava: http://www.cambridge.org/resources/052182060X/MCIIJ2e/grammar.htm
Структура репозитория:
grammar - директория с описанием грамматики входного языка
tests - директория с тестами, каждый тест должен включать два файла: файл с кодом на исходном языке и файл с кодом на Python, который ожидается на выходе разрабатываемого транслятора
lexer - директория с исходным кодом лексического анализатора, включая файлы для утилиты FLEX и подобных, если они используются
parser - директория с исходным кодом синтаксического анализатора, включая файлы для утилиты BISON и подобных, если они используются
seman - директория с исходным кодом семантического анализа
... - другие директории и файлы, при необходимости
В каждой директории должен содержаться файл README.md
с краткой информацией об имеющихся в ней файлах
В начале файла README.md в корне репозитория (данный файл) необходимо указать информацию о: номерах групп и ФИО студентов, выполняющих задание, а также наименование выбранного по варианту входного языка.
В репозитории должно содержаться не менее одного коммита на каждый из этапов выполнения курсовой работы. В случае, если работа над кодом ведется параллельно несколькими студентами, настоятельно рекомендуется использовать механизм пулл-реквестов. По желанию студентов в репозитории могут быть включены дополнительные ограничения, такие как запрет пушить код напрямую в master
минуя пулл-реквест.
Участие каждого студента в выполнении проекта будет оцениваться в том числе по количеству коммитов, сделанных данным студентом, а также по распределению данных коммитов во времени в течение семестра.
Пояснительная записка к курсовой работе должна содержать следующие разделы:
- Введение
- Постановка задачи
- Описание исходного языка
- Описание лексического и синтаксического анализатора
- Структура разработанной программы
- Результаты тестирования
- Руководство пользователя
- Заключение
- Библиографический список
- Приложение
Перечисленные разделы должны содержать информацию:
- Введение – описание задач, которые возлагаются на синтаксический и семантический анализ в работе транслятора, а также общую характеристику исходного языка, выбранного по варианту задания, и области его применения;
- Постановка задачи – текст задания, конкретизированный указанием исходного языка и словесным описанием выбранного подмножества этого языка;
- Описание исходного языка – регулярную грамматику, описывающую лексемы языка, и КС-грамматику, описывающую синтаксис языка;
- Описание лексического и синтаксического анализатора – описание автоматных или иных моделей, выбранных для реализации лексического и синтаксического анализов;
- Структура разработанной программы – обобщенное описание спроектированной программы с указанием ее основных блоков, функций и их взаимосвязей;
- Результаты тестирования – несколько тестов, на которых была проверена работа спроектированной программы, в виде входных текстов, предъявленных программе, и текстов ее ответных реакций;
- Руководство пользователя – инструкцию по подготовке исходных данных, запуску программы и интерпретации ее сообщений;
- Заключение – критический анализ проделанной работы с указанием ее достоинств и, возможно, недостатков;
- Библиографический список – список использованной литературы (на которую в основном тексте полагается делать ссылки);
- Приложение – исходный текст спроектированной программы.
Оценка за курсовую работу может быть снижена по следующим причинам:
- задание выполнено не полностью;
- нарушены сроки выполнения двух и более этапов задания;
- в грамматику исходного языка внесены существенные изменения, которые не были согласованы с преподавателем;
- в репозитории отсутствуют коммиты, свидетельствующие об участии данного студента в работе над проектом в течение всего семестра;
- работа выполнена несамостоятельно, студент не в состоянии объяснить как устроена программа, ответить на вопросы по коду и т.п.
Данный список причин не является полным.
Мовчан Максим Игоревич 4831 MINC