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

UptoLike

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

15
Рассмотрим семантические функции к R-схеме лексического анализатора
языка МИЛАН. Введем следующие обозначения:
- $Position - текущая позиция в строке, просматриваемая лексическим анали-
затором;
- $Number_String - текущая строка программы, просматриваемая лексиче-
ским анализатором;
- * - при любом условии (любой символ).
Семантические функции к R-схеме лексического анализатора:
y0: подготовка (инициализация таблиц и переменных), $Position=0,
$Number_String=1;
y1: чтение следующего символа программы на языке МИЛАН;
y2: увеличение счётчика текущей позиции ($Position++);
y3: переход на новую строку в программе, увеличение счётчика текущей
строки, и сброс счётчика позиции ($Number_String++, $Position=0);
y4: накопление символов ключевого слова или идентификатора;
y5: проверка на принадлежность выделенного слова к ключевым словам;
y6: проверка на принадлежность выделенного слова к идентификаторам;
y7: накопление символов константы;
y8: проверка на принадлежность выделенной константы таблице констант;
y9: запись сформированной лексемы в массив лексем;
y10: завершение работы лексического анализатора;
y11: формирование лексемы;
Ограничения: Программа на языке МИЛАН должна содержать <=15
идентификаторов, <= 15 констант, <=500 лексем
Пример №1: Рассмотрим пример обработки лексическим анализатором
программы на языке МИЛАН, вычисляющую сумму пяти вводимых чисел.
BEGIN
x:=0;
n:=5;
WHILE n>0 DO
z:= READ;
x:= x+z;
n:= n-1
ENDDO;
OUTPUT(x)
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
11 , 0
19 , 2
13 , 2
20 , 1
2 , 0
19 , 3
16 , 0
9, 0
12 , 0
19 , 1
20
16 , 0
19 , 1
14 , 0
12 , 0
12 , 0
19 , 2
16 , 0
19, 2
14 , 1
20 , 3
30
5 , 0
12 , 0
8 , 0
19 , 1
19 , 1
18 , 0
4 , 0
   Рассмотрим семантические функции к R-схеме лексического анализатора
языка МИЛАН. Введем следующие обозначения:
   - $Position - текущая позиция в строке, просматриваемая лексическим анали-
затором;
   - $Number_String - текущая строка программы, просматриваемая лексиче-
ским анализатором;
   - * - при любом условии (любой символ).
   Семантические функции к R-схеме лексического анализатора:
   y0: подготовка (инициализация таблиц и переменных), $Position=0,
$Number_String=1;
    y1: чтение следующего символа программы на языке МИЛАН;
    y2: увеличение счётчика текущей позиции ($Position++);
    y3: переход на новую строку в программе, увеличение счётчика текущей
строки, и сброс счётчика позиции ($Number_String++, $Position=0);
    y4: накопление символов ключевого слова или идентификатора;
    y5: проверка на принадлежность выделенного слова к ключевым словам;
    y6: проверка на принадлежность выделенного слова к идентификаторам;
    y7: накопление символов константы;
    y8: проверка на принадлежность выделенной константы таблице констант;
    y9: запись сформированной лексемы в массив лексем;
    y10: завершение работы лексического анализатора;
    y11: формирование лексемы;
   Ограничения: Программа на языке МИЛАН должна содержать <=15
идентификаторов, <= 15 констант, <=500 лексем
   Пример №1: Рассмотрим пример обработки лексическим анализатором
программы на языке МИЛАН, вычисляющую сумму пяти вводимых чисел.
   BEGIN
    x:=0;
    n:=5;
    WHILE n>0 DO
      z:= READ;
      x:= x+z;
      n:= n-1
    ENDDO;
    OUTPUT(x)
   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    11 , 0   19 , 2   13 , 2   20 , 1    2,0     19 , 3   16 , 0    9, 0   12 , 0   19 , 1
      20    16 , 0   19 , 1   14 , 0   12 , 0   12 , 0   19 , 2   16 , 0   19, 2   14 , 1   20 , 3
      30     5,0     12 , 0    8,0     19 , 1   19 , 1   18 , 0    4,0




                                                15