Разработка компиляторов. Ишакова Е.Н. - 26 стр.

UptoLike

Составители: 

26
while l<>0 do
begin
decid(l, t);
outst(l)
end
end;
Правило и процедура D с учетом семантических проверок принимают
вид:
D <inst(0)> I <instl> {, I <instl> } : ( int <deс(‘int’)> | bool <dec(‘bool’)> )
procedure D;
begin
inst(0);
I;
instl;
while EQ(‘,’) do
begin
gl; I; instl
end;
if EQ(‘:’) then gl else ERR;
if EQ(‘int’) then
begin
gl; dec(‘int’)
end
else
if EQ(‘bool’)
then
begin
gl; dec(‘bool’)
end
else ERR
end;
Анализ выражений
Задача анализа выражений - проверить описаны ли переменные, встре-
чающиеся в выражениях, и соответствуют ли типы операндов друг другу и типу
операции.
Эти задачи решаются следующим образом. Вводится таблица двуместных
операций (таблица 2.2) и стек, в который в соответствии с разбором выражения
E заносятся типы операндов и знак операции. После семантической проверки в
стеке оставляется только тип результата операции. В результате разбора всего
выражения в стеке остается тип этого выражения.
Для реализации анализа выражений введем следующие обозначения про-
цедур и функций:
          while l<>0 do
            begin
                 decid(l, t);
                 outst(l)
            end
       end;
       Правило и процедура D с учетом семантических проверок принимают
вид:
       D →  I  {, I  } : ( int  | bool  )
       procedure D;
       begin
          inst(0);
          I;
          instl;
          while EQ(‘,’) do
              begin
                  gl; I; instl
              end;
          if EQ(‘:’) then gl else ERR;
          if EQ(‘int’) then
              begin
                  gl; dec(‘int’)
              end
          else
              if EQ(‘bool’)
                  then
                      begin
                          gl; dec(‘bool’)
                      end
              else ERR
       end;
                                      Анализ выражений
      Задача анализа выражений - проверить описаны ли переменные, встре-
чающиеся в выражениях, и соответствуют ли типы операндов друг другу и типу
операции.
      Эти задачи решаются следующим образом. Вводится таблица двуместных
операций (таблица 2.2) и стек, в который в соответствии с разбором выражения
E заносятся типы операндов и знак операции. После семантической проверки в
стеке оставляется только тип результата операции. В результате разбора всего
выражения в стеке остается тип этого выражения.
      Для реализации анализа выражений введем следующие обозначения про-
цедур и функций:
                                                                                       26