/Materials Сб, 27.04.2024, 09:51

Сайт методики довузовского обучения программированию
и проектной деятельности в информатике


Главная страница, Контакты, RSS
 
> Меню сайта

> Разделы новостей
Семинар [36]
Семинар по системному и прикладному программированию
Etc [15]
Разное
Конференция [16]
Открытая конференция исследовательских и проектных работ

> Архив новостей

> Партнеры

> Поиск

> Статистика

Главная » 2013 » Июнь » 21 » Модульная система трансляции с возможностью обратимой трансляции для ЯВУ, машинно-независимым исполнением программ и поддержкой JIT
Модульная система трансляции с возможностью обратимой трансляции для ЯВУ, машинно-независимым исполнением программ и поддержкой JIT
Данила Байгушев
8-9 класс


В настоящее время существует множество различных языков программирования. Наряду с распространенными языками, использующимися для промышленной разработки программных продуктов, такими как C, C++, C#, Java, Python и др., и учебными языками, таких как КуМир, Лого или Паскаль, существуют и экспериментальные, а также так называемые эзотерические языки программирования [1]. Они создавались с целью показать какой-либо интересный подход к программированию, а иногда просто ради шутки. Однако эзотерические языки часто имеют своеобразный синтаксис, и ручной перевод из традиционного языка программирования в эзотерический может быть весьма сложным. Один из таких языков – Шекспир (Shakespeare) [2]. Он интересен тем, что программы на этом языке похожи на литературные произведения [3]. Тем не менее, этот язык является Тьюринг-полным, то есть на нём можно выразить любой алгоритм.

Цель данной работы – создать систему трансляции для перевода текстов на на различных языках программирования (в том числе и эзотерических) из одного языка в другой, поддерживающую обратимую трансляцию для языков высокого уровня.

Разработанная система трансляции (Small Compiler Collection, SCC) имеет модульную структуру и напоминает известную систему компиляции GCC [4]. Такой подход позволяет легко добавлять в систему новые языки. Основная идея – хранение всех программ в универсальном внутреннем представлении, использующем абстрактные синтаксические деревья (AST) [5]. Система представляет собой совокупность модулей, позволяющих получать из текста программы дерево AST, и наоборот. Такой способ позволяет для добавления нового языка L всего лишь написать два модуля – фронт-энд (front-end, ответственен за преобразование из данного языка L в AST) и бэк-энд (back-end, ответственен за преобразование из AST в данный язык L) и таким образом получить возможность трансляции из любого высокоуровневого языка L1 в любой высокоуровневый или низкоуровневый язык L2 из имеющихся в коллекции системы. Следует отметить, что GCC позволяет транслировать только с высокоуровневого языка в низкоуровневый, так как при трансляции в GCC теряется часть информации, и поэтому пригоден только для компиляции в машинный код, а не для "перевода" с одного языка высокого уровня на другой.

В ходе работы был разработан стандарт AST (SCC_tree) для внутреннего хранения программ. Для визуализации таких деревьев был разработан независимый модуль [6] на основе программы Dot [7], транслирующий AST в изображение в формате JPEG. Также был написан оптимизатор и линкер для многомодульных программ.

В качестве «стандартного» языка программирования был выбран язык C. На основе его подмножества был создан скриптовый язык высокого уровня (SCC_C). Также был немного переработан язык Shakespeare (SCC_spl) - в него была добавлена поддержка функций, которые отсутствуют в стандартном Shakespeare, при этом удалось сохранить полную обратную совместимость со стандартным языком. Также была сохранена характерная «литературная» стилистика синтаксиса языка.

В качестве языка низкого уровня (ассемблера) был разработан собственный язык для софт-процессора (SCC_asm), реализующий стековые операции, базовую арифметику, условные и безусловный переходы, вызовы функций, работу с памятью, ввод и вывод информации на экран.

Для исполнения программ был разработан программно реализованный софт-процессор стеково-регистровой архитектуры. Также был реализован компилятор из SCC_asm в пригодный для этого процессора код (SCC_exe). Для увеличения скорости исполнения программ был разработан вариант софт-процессора с возможностью JIT-компиляции бинарного кода (SCC_bin), полученного из SCC_asm, в опкоды семейства процессоров Intel 80x86 (32-bit).

Также было написано несколько демонстрационных программ, которые показывают высокую эффективность JIT-компиляции по сравнению с покомандной интерпретацией. Скорость выполнения JIT-компилированого кода была в 2.5 - 3 раза выше.

Работа выполнена на языке C++ (GCC g++ v.4.7.2), в среде CodeBlocks [8], консольные модули написаны для операционной системы Windows, библиотеки разработаны как кроссплатформенные. Исходный код и исполняемые файлы доступны в репозитории автора на GitHub: github.com/discharged-spider/SCC и Google Code: code.google.com/p/scc-small-compiler-collection.

Литература

     1. http://en.wikipedia.org/wiki/Esoteric_programming_language
2.  http://shakespearelang.sourceforge.net
3. http://shakespearelang.sourceforge.net/report/shakespeare/#sec:hello
4. 
http://www.gnu.org/software/gcc
5. 
http://en.wikipedia.org/wiki/Abstract_syntax_tree
6. 
http://ded32.net.ru/news/2012-09-23-63
7. 
http://www.graphviz.org/pdf/dotguide.pdf
8. 
http://www.codeblocks.org

Материалы проекта

Статья
Презентация
Доклад (видео)
Краткая демонстрация работы (видео)
Материалы к демонстрации

Репозиторий проекта: github://discharged-spider/SCC
Скачать установщик SCC
 

Категория: Семинар | Просмотров: 6312 | Добавил: ded32
> Инструменты

Orphus


О рекламе на сайте ↑

Сайт рас­по­ло­жен на бес­плат­ном хос­тин­ге, пра­ви­ла ко­то­ро­го за­пре­ща­ют вы­ре­зать ре­к­ла­му, встав­ляе­мую авто­ма­ти­чес­ки, в том чис­ле в ви­де авто­ма­ти­чес­ко­го от­кры­тия стра­ниц дру­гих сай­тов. Ав­тор это­го сай­та не име­ет ни­ка­ко­го отно­ше­ния к этой ре­кла­ме.


> Загрузить

> Основные материалы

> Примеры проектов



Copyright (c) И.Р. Дединский, 2006-2024
Никакая часть материалов данного сайта или его подразделов не может быть прямо или косвенно процитирована или упомянута без действующей активной ссылки на данный сайт
...

Хостинг от uCoz

MasterHost Orphus