Операция |
Имя операнда 1 |
Имя операнда 2 |
Имя результата |
+ |
b |
a |
var1 |
+ |
d |
c |
var2 |
* |
var1 |
var2 |
var3 |
= |
var3 |
x |
Задачи семантического анализа:
– выявление связей каждой операции с объектами, являющимися ее операндами и объектом, который будет хранить результат этой операции;
– проверка возможности исполнения операции над значениями операндов в соответствии с их типами;
– определение способа преобразования исходных данных каждой операции в значение результата.
Компиляция – преобразование последовательности тетрад в текст программы на целевом языке.
Интерпретация – исполнение тетрад начиная с точки входа, формирование результатов обработки входных данных.
Трансляция программ и понятие связывания.
for( int i = 0; i < n; i++)
{
…
}
for– связывает
содержимое круглых скобок с оператором/блоком и понимается как
«оператор цикла с предустановкой, действиями по переходу к следующей итерации
и проверкой условия выполнения тела цикла»;
inti – связывает наименование i с типом данных «целое»;
i=0 – связывает значение 0 с переменной i;
( … ; – связывает два предыдущих связывания с элементом «предустановка» оператора цикла;
; i < n ; – связывает логическое выражение i<n с элементом «проверка условия» оператора цикла;
{ и } – связывают все находящиеся между скобками операторы с элементом «тело» оператора цикла и область видимости (это тело цикла) с переменной i, объявленной в первой строке;
Момент выполнения связывания:
- написание программы;
- трансляция программы (этап трансляции);
- исполнение программы.
Зависимость характеристик программы от того, в какие моменты выполняются те или иные связывания.
Процедуры/функции, локальные данные, нелокальные данные, аргументы.
Раздельная трансляция, совместная трансляция.
Адреса и значения, l-value и r-value.
Адресная арифметика и указатели.
Типы данных.
Базовые типы. Константы.
Производные типы, способы образования.
1. Модификаторы (unsigned int === unsigned, short int === short, double float === double, …).
2. Массивы (тип определяется типом элементов и только размерностью или и размерностью и границами по каждому измерению, допустимы ли «ступенчатые» массивы, …).
3. Записи (struct, record, …)
4. Процедуры/функции.
5. Классы (ООП).
6. Указатели на объекты некоторого типа.
Контроль типов данных объектов программы
Run-time контроль: (Visual) Basic, PHP, …
- необязательность объявлений типов данных или отсутствие средств для объявлений;
- возможность изменения типа во время исполнения программы;
- неявные преобразования типов данных;
- малые затраты времени на контроль типов во время трансляции, но большие – при исполнении программы.
Промежуточные варианты: Algol-60, Fortran, С, С++, …
- разнообразные варианты компромиссов между отсутствием типизации и строгой типизацией;
- соответствующее степени компромисса соотношение затрат на трансляцию/исполнение.
Строгая типизация – Ada, Pascal, Java, C# …
- для каждого используемого в программе типа должны быть известны множество значений (т.е. внутреннее устройство) и множество применимых к ним операций;
- каждый объект программы должен иметь однажды определенный и не изменяемый тип;
- при выполнении любого присваивания значения объекту тип присваиваемого значения должен быть эквивалентен типу объекта;
- использование значения объекта допускается только в качестве операнда операций, допустимых для данного типа;
- практически весь контроль выполняется во время трансляции, минимум – во время исполнения.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.