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

UptoLike

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

16
Алгоритм 2.1. Разбор цепочек символов по ДС с действиями
Шаг 1. Объявляем текущим начальное состояние ДС H.
Шаг 2. До тех пор, пока не будет достигнуто состояние
ER или конечное
состояние ДС, считываем очередной символ анализируемой строки и перехо-
дим из текущего состояния ДС в другое по дуге, помеченной этим символом,
выполняя при этом соответствующие действия. Состояние, в которое попадаем,
становится текущим.
ЛА строится в два этапа:
1) построить ДС с действиями для распознавания и формирования внут-
реннего представления лексем;
2) по ДС с действиями написать программу сканирования текста исход-
ной программы.
Пример 2.7. Составим ЛА для модельного языка М. Предварительно вве-
дем следующие обозначения для переменных, процедур и функций.
Переменные:
1) СНочередной входной символ;
2)
S - буфер для накапливания символов лексемы;
3)
Bпеременная для формирования числового значения константы;
4)
CS - текущее состояние буфера накопления лексем с возможными зна-
чениями:
Н - начало, I - идентификатор, N - число, С - комментарий, DVдвое-
точие,
О - ограничитель, V - выход, ERошибка;
5)
t - таблица лексем анализируемой программы с возможными значе-
ниями:
TW - таблица служебных слов М-языка, TLтаблица ограничителей М-
языка,
TI - таблица идентификаторов программы, TNчисел, используемых в
программе;
6)
z - номер лексемы в таблице t (если лексемы в таблице нет, то z=0).
Процедуры и функции:
1) gcпроцедура считывания очередного символа текста в переменную
СН;
2)
letлогическая функция, проверяющая, является ли переменная СН
буквой;
3)
digit - логическая функция, проверяющая, является ли переменная СН
цифрой;
4)
nillпроцедура очистки буфера S;
5)
addпроцедура добавления очередного символа в конец буфера S;
6)
look(t) – процедура поиска лексемы из буфера S в таблице t с возвраще-
нием номера лексемы в таблице;
7)
put(t) – процедура записи лексемы из буфера S в таблицу t, если там не
было этой лексемы, возвращает номер данной лексемы в таблице;
8)
out(n, k) – процедура записи пары чисел (n, k) в файл лексем.
Шаг 1. Построим ДС с действиями для распознавания и формирования
внутреннего представления лексем модельного языка
М (рисунок 2.5).
          Алгоритм 2.1. Разбор цепочек символов по ДС с действиями
      Шаг 1. Объявляем текущим начальное состояние ДС H.
      Шаг 2. До тех пор, пока не будет достигнуто состояние ER или конечное
состояние ДС, считываем очередной символ анализируемой строки и перехо-
дим из текущего состояния ДС в другое по дуге, помеченной этим символом,
выполняя при этом соответствующие действия. Состояние, в которое попадаем,
становится текущим.
      ЛА строится в два этапа:
      1) построить ДС с действиями для распознавания и формирования внут-
реннего представления лексем;
      2) по ДС с действиями написать программу сканирования текста исход-
ной программы.
      Пример 2.7. Составим ЛА для модельного языка М. Предварительно вве-
дем следующие обозначения для переменных, процедур и функций.
                                   Переменные:
     1) СН – очередной входной символ;
     2) S - буфер для накапливания символов лексемы;
     3) B – переменная для формирования числового значения константы;
      4) CS - текущее состояние буфера накопления лексем с возможными зна-
чениями: Н - начало, I - идентификатор, N - число, С - комментарий, DV – двое-
точие, О - ограничитель, V - выход, ER –ошибка;
     5) t - таблица лексем анализируемой программы с возможными значе-
ниями: TW - таблица служебных слов М-языка, TL – таблица ограничителей М-
языка, TI - таблица идентификаторов программы, TN – чисел, используемых в
программе;
     6) z - номер лексемы в таблице t (если лексемы в таблице нет, то z=0).
                             Процедуры и функции:
      1) gc – процедура считывания очередного символа текста в переменную
СН;
     2) let – логическая функция, проверяющая, является ли переменная СН
буквой;
     3) digit - логическая функция, проверяющая, является ли переменная СН
цифрой;
     4) nill – процедура очистки буфера S;
     5) add – процедура добавления очередного символа в конец буфера S;
     6) look(t) – процедура поиска лексемы из буфера S в таблице t с возвраще-
нием номера лексемы в таблице;
     7) put(t) – процедура записи лексемы из буфера S в таблицу t, если там не
было этой лексемы, возвращает номер данной лексемы в таблице;
     8) out(n, k) – процедура записи пары чисел (n, k) в файл лексем.
     Шаг 1. Построим ДС с действиями для распознавания и формирования
внутреннего представления лексем модельного языка М (рисунок 2.5).
                                                                           16