Андронкин Никита
Горно-Алтайск, ДЦКТ
Гимназия № 3, 10 класс

Развитие и совершенствование языков программирования и соответствующих инструментальных средств разработки представляет собой одно из основополагающих направлений современной информатики. Потребность в мощных, гибких и надежных языковых инструментах, адекватных предельному уровню сложности и ответственности задач, решаемых программным обеспечением, определяет высокую активность исследований и разработок в данной области.

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

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

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

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

Автором разработан 32-х разрядный компилятор диалекта языка Pascal. В языке реализована поддержка следующих конструкций:

  1. циклы;
  2. ветвления;
  3. Поддерживаются следующие типы данных:
  4. целочисленный тип;
  5. вещественный тип;
  6. строковый тип;
  7. статические массивы;
  8. записи;

Также возможно создание процедур. Целевой архитектурой компилятора является IA32. В процессе работы компилятор генерирует представление исходной программы на языке ассемблера.

Научные руководители: Гришина Т.Г., Курносов М.Г.