Основы трансляции. Рыбанов А.А. - 21 стр.

UptoLike

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

21
$StekRes ($Ai←$StekRes), сменить знак этого числа и занести его в стек
$StekRes (-$Ai→$StekRes);
y9: занесение в стек $StekSum кода операции типа сложения;
y10: в переменную $Bi снять элемент со стека $StekRes ($Bi←$StekRes), в
переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), в переменную
$ksum снять элемент со стека $StekSum ($ksum←$StekSum), вы полнить
операцию типа сложение $Ai ots($ksum) $Bi и результат занести в стек $StekRes;
y11: добавление в стек $StekRel значения операции типа отношение
($Tab_Lexems[$Number_Lexem]->Value→$StekRel);
y12: в переменную $Bi снять элемент со стека $StekRes ($Bi←$StekRes), в
переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), в переменную
$krel снять элемент со стека $StekRel ($krel←$StekRel), выполнить операцию
сравнения $Ai otn($krel) $Bi и результат занести в стек $StekRes ([0, 1]
→$StekRes);
y13: добавить значение лексемы с номером Number_Lexem в стек StekIdent
($Tab_Lexems[$Number_Lexem]->Value→$StekIdent);
y14: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), в
переменную $Bi снять со стека $StekIdent значение лексемы ident
($Bi←$StekIdent), идентификатору с номером $Bi, присвоить значение $Ai
($ArrIdent[$Bi]=$Ai);
y15: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), на
печатать переменную $Ai;
y16: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), если
$Ai=1, то это истина, иначе - ложь;
y17: перейти на лексему номер $Tab_Lexems[$Number_Lexem]->Value;
y18: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), если
$Ai=1, то это истина, иначе - ложь;
y19: перейти на лексему номер $Tab_Lexems[$Number_Lexem]->Value-1;
y20: завершение работы;
Пример №3: Рассмотрим пример обработки программы на языке МИЛАН.
BEGIN
x:=2;
y:=5;
OUTPUT(x+y)
END
Результаты работы лексического анализатора:
1) Таблица лексем
номер
0
1
2
3
4
5
6
7
8
9
0
1 , 0
19 , 1
16 , 0
20 , 1
12 , 0
19 , 2
16 , 0
20 ,2
12 ,0
10
8 , 0
17 , 0
19, 1
14 , 0
19 , 2
18 , 0
4 , 0
2) Таблица идентификаторов 3) Таблица констант
номер
константа
1
2
2
5
номер
идентификатор
1
x
2
y
$StekRes ($Ai←$StekRes), сменить знак этого числа и занести его в стек
$StekRes (-$Ai→$StekRes);
   y9: занесение в стек $StekSum кода операции типа сложения;
   y10: в переменную $Bi снять элемент со стека $StekRes ($Bi←$StekRes), в
переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), в переменную
$ksum снять элемент со стека $StekSum ($ksum←$StekSum), вы полнить
операцию типа сложение $Ai ots($ksum) $Bi и результат занести в стек $StekRes;
   y11: добавление в стек $StekRel значения операции типа отношение
($Tab_Lexems[$Number_Lexem]->Value→$StekRel);
   y12: в переменную $Bi снять элемент со стека $StekRes ($Bi←$StekRes), в
переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), в переменную
$krel снять элемент со стека $StekRel ($krel←$StekRel), выполнить операцию
сравнения $Ai otn($krel) $Bi и результат занести в стек $StekRes ([0, 1]
→$StekRes);
   y13: добавить значение лексемы с номером Number_Lexem в стек StekIdent
($Tab_Lexems[$Number_Lexem]->Value→$StekIdent);
   y14: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), в
переменную $Bi снять со           стека $StekIdent значение лексемы ident
($Bi←$StekIdent), идентификатору с номером $Bi, присвоить значение $Ai
($ArrIdent[$Bi]=$Ai);
   y15: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), на
печатать переменную $Ai;
   y16: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), если
$Ai=1, то это истина, иначе - ложь;
   y17: перейти на лексему номер $Tab_Lexems[$Number_Lexem]->Value;
   y18: в переменную $Ai снять элемент со стека $StekRes ($Ai←$StekRes), если
$Ai=1, то это истина, иначе - ложь;
   y19: перейти на лексему номер $Tab_Lexems[$Number_Lexem]->Value-1;
   y20: завершение работы;
   Пример №3: Рассмотрим пример обработки программы на языке МИЛАН.
     BEGIN
      x:=2;
      y:=5;
      OUTPUT(x+y)
     END
  Результаты работы лексического анализатора:
  1) Таблица лексем
    номер    0      1        2        3        4        5        6        7       8       9
       0           1,0     19 , 1   16 , 0   20 , 1   12 , 0   19 , 2   16 , 0   20 ,2   12 ,0
      10    8,0   17 , 0   19, 1    14 , 0   19 , 2   18 , 0    4,0
  2) Таблица идентификаторов                       3) Таблица констант
    номер   идентификатор                             номер    константа
       1          x                                     1            2
      2           y                                     2            5

                                             21