Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Синтаксический анализитор.doc
Скачиваний:
8
Добавлен:
19.11.2019
Размер:
385.54 Кб
Скачать

2.4. Табличный транслятор многочленов

Пользуясь выработанным форматом таблицы переходов, заполним ее для распознавателя многочленов. Имея ввиду, что должен выполняться не только синтаксический анализ, но и трансляция многочлена, предусмотрим в таблице графу «Процедура», в которой будем записывать номер семантической процедуры. Эта процедура будет вызываться при совпадении входного символа и символа в таблице. Если указан нулевой номер семантической процедуры, вызов не происходит (или процедура не выполняет никаких действий). Некоторые состояния добавляются в таблицу лишь для того, чтобы предусмотреть в нужные моменты выполнение необходимых семантический процедур (например, состояния 1, 6, 25).

Таблица 4.

Сост.

Символ

Переход

Ошибка

Вызов

Читать

Проц.

Примечание

Многочлен

1

Л

2

-

-

-

3

Обнуление коэффициента

2

+

5

-

-

+

4

3

-

5

-

-

+

4

4

Л

5

-

-

-

5

Нет знака спереди

5

Л

12

-

+

-

0

На 1-е слагаемое

6

Л

7

-

-

-

6

После 1-го слагаемого

7

+

10

-

-

+

4

Начало цикла

8

-

10

-

-

+

4

9

0

+

-

-

7

Выход

10

Л

12

-

+

-

0

На слагаемое

11

Л

7

-

-

-

6

Конец цикла

Слагаемое

12

Ц

15

-

-

-

0

13

x

21

+

+

+

10

a=1

14

Л

0

-

-

-

9

После степени

15

Л

25

-

+

-

0

На целое

16

Л

17

-

-

-

8

После целого

17

x

19

-

-

+

0

18

Л

0

-

-

-

11

k=0

19

Л

21

-

+

-

0

На степень

20

Л

0

-

-

-

9

Конец слагаемого

Окончание табл.4

Сост.

Символ

Пере

ход

Ошибка

Вызов

Читать

Проц.

Примечание

Степень

21

^

23

-

-

+

0

22

Л

0

-

-

-

13

p=1

23

Л

25

-

+

-

0

На целое

24

Л

0

-

-

-

12

Целое

25

Л

26

-

-

-

1

Инициализация

26

Ц

27

+

-

+

2

Первая цифра

27

Ц

27

-

-

+

2

Последующие цифры

28

Л

0

-

-

-

0

Перед выполнением перехода с возвратом необходимо запомнить номер состояния, в которое автомат должен возвратиться. Недостаточно использовать для этого отдельную переменную, способную хранить номер только одного состояния. Поскольку вызовы могут быть вложенными. Это соответствует стековой дисциплине (LIFO). Для запоминания номера состояния перед выполнением перехода используется стек.