Сборник по задачам и примерам Assembler


Лексический анализ - часть 2


Сканер работает с определенным набором таблиц, среди которых есть входные и выходные.

В общем случае сканер должен иметь две входные таблицы — таблицу лексем языка и таблицу классов литер. Таблица лексем языка содержит перечень всех лексем языка и соответствующих им целочисленных значений. Для нашей грамматики таблица может быть следующей:

Лексема Внутренний код Лексема Внутренний код

ПРОГРАММА

1

*

23

:=

24

НАЧ БЛОК

3

)

25

КОН_БЛОК

4

НАЧ_ПРОГ

26

REAL

5

КОН_ПРОГ

27

INT_BYTE

6

/

28

DIV

7

INT_WORD

29

ЧИТАТЬ

8

INT_DWORD

30

ПИСАТЬ

9

=

31

ДЛЯ

10

MOD

32

ДЕЛАТЬ

11

[

33

(

12

]

34

ТО

13

<

35

ID

14

>

36

CHJNT

15

==

37

CH_REAL

16

>=

38

17

=<

39

>

18

до

40

1

19

ПОКА

41

20

довниз

42

+

21

ЕСЛИ

43

-

22

до

44

ПЕРЕЙТИ_НА*

Таблица классов литер используется только в процессе сканирования и предназначена для выяснения класса литеры, когда она выбирается сканером из входного потока. Лучше всего эту таблицу организовать в виде массива, элементы которого отражены на используемую кодовую таблицу (например, таблицу ASCII). Значение каждого элемента таблицы классов литер определяется классом литеры в кодовой таблице. В общем случае можно определить следующие классы литер:

  • d - цифра;
  • 1 — буква;
  • b — литеры, которые игнорируются, к ним может относится, например, пробел;
  • s1 — одиночные разделители: «.», «:», «(«, «)», «*»;
  • s2 — особые одиночные разделители: «.», «+», «-»,«:», «=», «<», «>».

Последние разделители отличаются тем, что они могут быть как собственно одиночными разделителями, так и входить в состав литер лексем, состоящих из нескольких литер. Например, разделитель «:» является не только одиночным, но и первой литерой двухлитерного разделителя «:=», а литеры «.», «+» и «-» являются составной частью лексемы «вещественное число».




- Начало -  - Назад -  - Вперед -