Skip to content

lyceum-boy/SS_CW_PythonCppTranslator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Flex & Bison Python to C++ Translator

Данный репозиторий содержит реализацию учебного транслятора подмножества языка программирования Python в язык программирования C++.

Транслятор выполнен в рамках курсовой работы по дисциплине «Системное программное обеспечение» 5 семестра БГТУ «ВОЕНМЕХ» им. Д.Ф. Устинова.

Цель работы

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

  • лексический анализ;
  • синтаксический анализ;
  • семантическую обработку;
  • генерацию эквивалентного кода на языке C++;
  • визуализацию абстрактного синтаксического дерева (АСТ).

Стек технологий

  • Python 3.9.13 — входной язык трансляции (подмножество языка);
  • C++17 — выходной язык трансляции;
  • Flex — генерация лексического анализатора;
  • Bison — генерация синтаксического анализатора (LALR(1)-парсер);
  • Graphviz (dot) — визуализация синтаксического дерева;
  • Make — автоматизация сборки и запуска;
  • Python 3.9.13 — постобработка dot-файла АСТ (цветная визуализация).

Структура проекта

  • lex.l — спецификатор лексического анализатора (Flex);
  • bison.y — спецификатор синтаксического анализатора (Bison);
  • ast_postproc.py — скрипт постобработки dot-файла для цветной визуализации АСТ;
  • Makefile — инструкции автоматизации сборки и запуска;
  • main.py — пример входной программы на Python;
  • main.cpp — сгенерированный C++ код;
  • ast.dot, ast.png — файл и изображение абстрактного синтаксического дерева;
  • ast-color.dot, ast-color.png — цветная версия АСТ.

Работа с транслятором

Управление сборкой и запуском проекта осуществляется с помощью Makefile.
В таблице приведены основные цели и их назначение.

Цель makefile Назначение
make translate Генерация лексического и синтаксического анализаторов, компиляция транслятора и его запуск на входном файле main.py
make ast Построение изображения абстрактного синтаксического дерева (ast.png)
make ast-color Генерация цветного АСТ с использованием скрипта ast_postproc.py
make run Компиляция и запуск сгенерированного C++ кода (main.cpp)
make clean Очистка всех сгенерированных файлов
make rebuild Полная пересборка проекта (clean → translate → ast → ast-color)

Типичный сценарий работы

make rebuild
make run