Книга: Системное программное обеспечение. Лабораторный практикум
Выводы по проделанной работе
Выводы по проделанной работе
В результате лабораторной работы № 4 построен генератор списка триад, порождающий триады для логических операций, оператора присваивания и условного оператора. Генератор списка триад обнаруживает семантические ошибки, связанные с присваиванием значений константам (когда первый операнд оператора присваивания – константа). При наличии одной ошибки пользователю выдается сообщение с указанием местоположения ошибки. При наличии нескольких ошибок обнаруживается только первая из них, и дальнейший анализ исходного текста прекращается.
Построенный генератор также выполняет оптимизацию списка триад методом свертки объектного кода и исключения лишних операций, что позволяет сократить объем результирующего списка триад и время выполнения объектного кода, который может быть построен на его основе. После выполнения оптимизации генератор списка триад может удалять из списка триады специального вида C и same в зависимости от настроек, сделанных пользователем.
Построенный при выполнении данной лабораторной работы генератор списка триад входит в состав компилятора, в который также входят: лексический анализатор, построенный при выполнении лабораторной работы № 2, и синтаксический анализатор, построенный при выполнении лабораторной работы № 3. Этот компилятор получает на вход исходную программу в соответствии с заданной грамматикой и порождает результирующую программу в виде списка триад.
Компилятор позволяет обнаруживать следующие однократные ошибки:
• любые лексические ошибки (неправильные лексемы);
• любые синтаксические ошибки (несоответствие исходной программы синтаксису заданного входного языка);
• семантические ошибки типа «присваивание значения константе».
При обнаружении ошибки пользователю выдается сообщение о типе ошибки (лексическая, синтаксическая или семантическая) и о местонахождении ошибки в тексте исходной программы. Дальнейший анализ типа обнаруженной ошибки не производится. При наличии нескольких ошибок в исходной программе обнаруживается только первая из них.
В результате выполнения лабораторных работ № 1–4 построен компилятор, выполняющий обработку исходной программы за пять проходов:
1. Лексический анализ исходного текста и построение таблицы лексем.
2. Синтаксический анализ по таблице лексем и построение дерева синтаксического разбора.
3. Построение списка триад по дереву синтаксического разбора.
4. Оптимизация списка триад методом свертки объектного кода.
5. Оптимизация списка триад методом исключения лишних операций.
На каждом проходе компилятора исходными данными являются результаты, полученные при выполнении предыдущего прохода.
Количество проходов построенного компилятора может быть существенно сокращено, поскольку все операции выполняются последовательно, независимо друг от друга, однако это не входит в задачу выполненных лабораторных работ.