Режим переполоха. Преобразование входного текста в постфиксную форму записи, страница 6

Операция

Имя операнда 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# …

-  для каждого используемого в программе типа должны быть известны множество значений (т.е. внутреннее устройство) и множество применимых к ним операций;

-  каждый объект программы должен иметь однажды определенный и не изменяемый тип;

-  при выполнении любого присваивания значения объекту тип присваиваемого значения должен быть эквивалентен типу объекта;

-  использование значения объекта допускается только в качестве операнда операций, допустимых для данного типа;

-  практически весь контроль выполняется во время трансляции, минимум – во время исполнения.