/Algol60TinyCompiler

Pared down Algol-60 compiler

Primary LanguagePython

В данном репозитории будет вестить разработка по созданию урезанной версии компилятора для языка Алгол-60. Все необходимые данные по сборке, установке, а также работе с репозиторием просьба описывать здесь.

Все остальное (краткое и не очень описние работы алгоритмов, программ и прочего) писать в Wiki.

Запрещается:
 - Заливать в репозиторий бинарники
 - Библиотеки, которые необходимы для работы с данным продуктом, но которые никак не редактировались разработчиками

Разрешается:
 - Код
 - Красивый код
 - Много красивого кода

Для присоединения к проекту, надо:
 - Зарегистрироваться на github.com
 - Пройти курс молодого бойца: http://help.github.com/win-set-up-git/ (возможно под линукс, в таком случае Git for Windows не понадобится, а курс молодого бойца надо будет начинать с "Next: Set Up SSH Keys")
 - Прислать мне ник, чтобы я добавил его к репозиторию

Скачивание репозитория:
> git clone git@github.com:username/Spoon-Knife.git
> cd Spoon-Knife
> git remote add upstream git://github.com/octocat/Spoon-Knife.git
> git fetch upstream

Документация (обязательно):
http://gnuu.org/2009/09/18/writing-your-own-toy-compiler/all/1/

Особенности работы под виндой:
 - Кракозябы при работе с русским текстом в названиях файлов и в комментариях к коммиту. Посему все комменты и файлы пишем на английском.
 
 Оригинальный синтаксис языка ALGOL-60
 - http://www.masswerk.at/algol60/syntax.txt
 
Классная дока
 - http://foja.dcs.fmph.uniba.sk/kompilatory/docs/compiler.pdf
 
 Для запуска Bison: 
 > bison -vd parser.y
 
 Для запуска flex:
 > flex tokens.l

Python замечательнейший язык! У питона есть модули PYL и llvm-py, которые есть не что иное, как lex, yacc и llvm обернутые для Python.
Пример создания простого компилятора для Паскаля:
 - https://github.com/alcides/pascal-in-python/

Берем за основу и создаем по образу и подобию.

Предупреждения насчет llvm-py были вполне обоснованы. Начнем с установки:
> sudo apt-get install llvm-2.7 (нужен, так как 0,6 версия llvm-py поддерживает только её)
> sudo apt-get install llvm-py

Все было бы хорошо, но при это не работает. При попытке сделать import llvm.core все падает с ощибкой:
-- .. llvm/_core.so: undefined symbol: ffi_type_sint16

Как это исправить? Гады разработчики никак не исправят этот баг и не выпустят штуку в релиз. Поэтому скачиваем с
 - http://www.mdevan.org/llvm-py/download.html исходники

Открываем patch-py3k.patch и наносим эти изменения в папку llvm
После чего вызываем билд в папку со скаченным llvm-py (..\llvm-py-0.6)
> python setup.py install --user --llvm-config=/usr/lib/llvm-2.7/bin/llvm-config