Проверка правильности операторов

Задачи проверки правильности операторов:

1) выяснить, все ли переменные, встречающиеся в операторах, описаны;

2) установить соответствие типов в операторе присваивания слева и справа от символа «:=»;

3) определить, является ли выражение Е в операторах условия и цикла булевым.

Данные задачи решаются путем включения в правило S ранее рассмотренной процедуры checkid, а также новых процедур eqtype и eqbool, имеющих следующий вид:

procedure eqtype;

begin

outst (t 2); outst (t 1);

if t 1 <>t 2 then ERR

end;

procedure eqbool;

begin

outst (t);

if t <> bool then ERR

end;

Правило S с учетом процедур СеА примет вид:

S ® I < checkid >:= E < eqtype > | if E < eqbool > then S else S

while E < egbool > do S | write (E) | read (I < checkid >)

Генерация кода

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

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

Формы внутреннего представления программы

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

Выделяют следующие общепринятые способы внутреннего представления программы:

1) многоадресный код с явно именуемым результатом (тетрады);

2) многоадресный код с неявно именуемым результатом (триады);

3) синтаксические деревья;

4) постфиксная запись;

5) машинные команды или ассемблерный код.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: