четверг, 19 января 2012 г.

Теория языков программирования

Итак, ранее названный предмет преподаётся в 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 - функции по генерации кода

3 комментария:

  1. и да, не повторяйте наших ошибок, не используйте в грамматике глобальную переменную yylval, которая может возвращать иногда непонятно что -)

    ОтветитьУдалить
  2. Я бы разбил эту статью на цикл маленьких, в которых подробнее описывалось построение миниатюрного компилятора. А то получилось, как в этом семестре - галопом по Европам :) В последней, надо было бы описать методы модификации динамического связывания и их реализацию. Если что - могу помочь.

    Олсо, годная статья. Жду по Прологу :)

    ОтветитьУдалить