Проверка типов

Проверка типов – важная часть семантического анализа. Модуль проверяет, соответствуют ли типы операндов в выражениях. Выражения можно разделить на два типа:

  • с заранее известным типом, к которому необходимо выполнить приведение;

  • с заранее неизвестным типом.

Для каждого типа выражения необходимы свои отдельные процедуры их обработки.

Например, для выражения x = y + 2.0 + 1 заранее известен тип, так как выполняется присваивание переменой «x» некоторого значения. А для выражения, содержащегося в параметрах вызова функции «print(x + y + 1)», тип, к которому его необходимо привести заранее неизвестен. В первом случае, необходимо рекурсивно обходить выражение и для всех узлов, для которых тип не совпадает с заранее известным, нужно выполнить вставку конструкции приведения типа.

До проверки типов:

После проверки типов:

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

Назад