В данном репозитории будет вестить разработка по созданию урезанной версии компилятора для языка Алгол-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