Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2008-04-14-02-21-Наталья-.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
825.86 Кб
Скачать

Функции лексического анализатора

  • IDENT - ищет текущий идентификатор в таблице идентификаторов. Если таковой в таблице имеется, то во входной поток записывается токен, соответствующий этой лексеме, иначе – вставляет запись об этом идентификаторе в таблицу идентификаторов и пишет в выходной поток IDENT.

  • VOID, MAIN,VECTOR, IF, FOR ELSE, CIN>> , COUT<<, GOTO, AND, NOT,OR –соответствующая лексема записывается в выходной поток(так как формально каждое ключевое слово хранится в отдельной таблице).

  • Separator – пишет в выходной поток конкретный разделитель.

  • NatNumber - ищет текущую константу в таблице констант(если не находит, то записывает туда) и выводит в выходной поток токен NatNumber.

  • AssignRel - пишет в выходной поток конкретный разделитель, так как они хранятся в разных таблицах.

  • AddOperation – пишет в выходной поток токен AddOperation.

  • MultOperation– пишет в выходной поток токен MultOperation.

  • RelOperation- пишет в выходной поток токен RelOperation

  • UnaryOperation – пишет в выходной поток конкретную унарную операцию.

Пусть на вход тестируемого лексического анализатора подана следующая входная цепочка:

void main()

{ int a;

a=5;

vector b[3];

b=[2.0, a, 4.1];

if(b[1]==a)

cout >> a;

В ходе разбора указанной цепочки будут созданы таблицы идентификаторов вида:

0

a

1

b

2

c

целочисленных констант:

0

5

1

3

2

1

вещественных констант:

0

2.0

1

4.1

На выходе лексического анализатора программа будет представлена потоком токенов:

VOID

MAIN

(

)

{

TypeBase

Ident

;

Ident

AssignRel

CI

;

VECTOR

Ident

[

CI

]

;

Ident

=

[

CF

,

CF

,

CF

]

;

IF

(

CF

RelOperation

Ident

)

COUT>>

Ident

;

}

Исходная программа будет выглядеть как

№ таблицы

Индекс

0

0

1

0

22

8

22

9

22

4

8

0

24

0

22

2

24

0

16

0

25

0

22

2

6

0

24

1

22

6

25

1

22

7

22

2

24

1

16

0

22

6

26

0

22

0

24

0

22

0

26

1

22

7

22

2

2

0

22

8

24

1

22

6

25

2

22

7

23

4

24

0

22

9

7

1

24

0

22

2

22

5