Итак, ранее названный предмет преподаётся в 1 семестре 4 курса и он оказался, пожалуй, самым сложным для меня с самого первого курса. Поэтому с него и начнём.
Основная идея курса - объяснить студентам, как устроен компилятор, хотя на деле весь курс представляет собой разбор методичек для лабораторных работ, в конце которых мы должны получить компилятор исходного текста программы в byte-code Java-машины.
Компилятор мы писали вместе с Константином Сухаревым для языка "Objectie-C".
Язык этот со статической типизацией, на что стоит обратить отдельное внимание.
Сам компилятор состоит из 4х частей:
1. Лексический анализатор
2. Синтаксический анализатор
3. Семантический анализатор
4. Генератор кода
Ссылка на репозиторий:
http://code.google.com/p/vstu-objective-c/
Основные файлы:
lexems.flex - лексика
grammar.y - правила по синтаксису
structs.h
declarations.h
definitions.cpp - дерево и функции по синтаксису
semanticStructs.h
semanticFuncs.h
semanticFuncs.cpp - дерево и функции по семантике
genFuncs.h
genFuncs.cpp - функции по генерации кода
Основная идея курса - объяснить студентам, как устроен компилятор, хотя на деле весь курс представляет собой разбор методичек для лабораторных работ, в конце которых мы должны получить компилятор исходного текста программы в byte-code Java-машины.
Компилятор мы писали вместе с Константином Сухаревым для языка "Objectie-C".
Язык этот со статической типизацией, на что стоит обратить отдельное внимание.
Сам компилятор состоит из 4х частей:
1. Лексический анализатор
2. Синтаксический анализатор
3. Семантический анализатор
4. Генератор кода
Ссылка на репозиторий:
http://code.google.com/p/vstu-objective-c/
Основные файлы:
lexems.flex - лексика
grammar.y - правила по синтаксису
structs.h
declarations.h
definitions.cpp - дерево и функции по синтаксису
semanticStructs.h
semanticFuncs.h
semanticFuncs.cpp - дерево и функции по семантике
genFuncs.h
genFuncs.cpp - функции по генерации кода
и да, не повторяйте наших ошибок, не используйте в грамматике глобальную переменную yylval, которая может возвращать иногда непонятно что -)
ОтветитьУдалитьсумасшедший)
ОтветитьУдалитьЯ бы разбил эту статью на цикл маленьких, в которых подробнее описывалось построение миниатюрного компилятора. А то получилось, как в этом семестре - галопом по Европам :) В последней, надо было бы описать методы модификации динамического связывания и их реализацию. Если что - могу помочь.
ОтветитьУдалитьОлсо, годная статья. Жду по Прологу :)