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

UptoLike

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

17
- $Tab_Lexems[..]->Value -массив значений лексем;
- $Number_Lexem - номер очередной рассматриваемой лексемы в массиве
лексем;
- $Stek_do - стек для циклов WHILE;
- $Stek_if - стек для развилок IF.
Рис. 8. R-схема расстановки ссылок
Семантические функции к R-схеме расстановки ссылок:
y0: подготовка (инициализация стеков и переменных), номер очередной
лексемы $Number_Lexem=1, прочитать лексему с номером $Number_Lexem;
y1: значение $Number_Lexem занести стек $Stek_do ($Number_Lexem$Stek_do);
y2: снять вершину стека $Stek_do в переменную $s ($s $Stek_do), снять
вершину стека $Stek_do в переменную $r ($r $Stek_do), значение $r+1
присвоть лексеме с номером $Number_Lexem [ENDDO→WHILE+1]
($Tab_Lexems[$Number_Lexem]->Value=$r+1), значение $Number_Lexem+1
присвоить лексеме с номером $s [DO→ENDDO+1]
($Tab_Lexems[$s]->Value=$Number_Lexem+1);
y3: значение $Number_Lexem занести в стек $Stek_if ($Number_Lexem→$Stek_if);
y4: снять вершину стека $Stek_if в переменную $r ($r $Stek_if), присвоить
значение $Number_Lexem+1 лексеме c номером $r [THEN→ELSE+1]
   - $Tab_Lexems[..]->Value -массив значений лексем;
   - $Number_Lexem - номер очередной рассматриваемой лексемы в массиве
лексем;
   - $Stek_do - стек для циклов WHILE;
   - $Stek_if - стек для развилок IF.




                       Рис. 8. R-схема расстановки ссылок
   Семантические функции к R-схеме расстановки ссылок:
   y0: подготовка (инициализация стеков и переменных), номер очередной
лексемы $Number_Lexem=1, прочитать лексему с номером $Number_Lexem;
   y1: значение $Number_Lexem занести стек $Stek_do ($Number_Lexem→$Stek_do);
   y2: снять вершину стека $Stek_do в переменную $s ($s ← $Stek_do), снять
вершину стека $Stek_do в переменную $r ($r ← $Stek_do), значение $r+1
присвоть лексеме с номером $Number_Lexem [ENDDO→WHILE+1]
($Tab_Lexems[$Number_Lexem]->Value=$r+1), значение $Number_Lexem+1
присвоить        лексеме      с        номером          $s     [DO→ENDDO+1]
($Tab_Lexems[$s]->Value=$Number_Lexem+1);
   y3: значение $Number_Lexem занести в стек $Stek_if ($Number_Lexem→$Stek_if);
   y4: снять вершину стека $Stek_if в переменную $r ($r ← $Stek_if), присвоить
значение $Number_Lexem+1 лексеме c номером $r [THEN→ELSE+1]

                                      17