Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа4 / Курсовик 13 вар(ТЯП).doc
Скачиваний:
11
Добавлен:
01.05.2014
Размер:
862.72 Кб
Скачать

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

  • KEYWORD- ищет полученную лексемуLeksemв таблицах ключевых слов. Если ключевой слово, то на выход подается пара: номер таблицыTableи индексIndex. Перевод головки лексического анализатора на одно состояние назад.

void KEYWORD ( leks Leksem, int &Table, int &Index)

  • IDENT- ищетполученную лексему Leksemв таблице идентификаторов. Если она в таблице имеется, то на выход подается номер таблицыTableи индексIndex, в противном случае новый идентификатор записывается в таблицу идентификаторов, и на выходе получаем номер таблицы и его индекс. Перевод головки лексического анализатора на одно состояние назад.

void IDENT ( leks Leksem, int &Table, int &Index)

  • ZCONST- ищет полученную лексемуLeksemв таблице целочисленных констант. Если она в таблице имеется, то на выход подается номер таблицыTableи индексIndex, в противном случае новый идентификатор записывается в таблицу идентификаторов, и на выходе получаем номер таблицы и его индекс.Перевод головки лексического анализатора на одно состояние назад.

void ZCONST ( leks Leksem, int &Table, int &Index)

  • RCONST- ищет полученную лексемуLeksemв таблице вещественных констант. Если таковая в таблице имеется, то на выходе – номер таблицыTableи индексIndex, соответствующий этой лексеме, иначе – вставляет запись об этой константе в таблицу целочисленных констант, и опять же на выход подается номер таблицы и индекс. Перевод головки лексического анализатора на одно состояние назад.

void RCONST ( leks Leksem, int &Table, int &Index)

  • SEPAR–ищет полученную лексемуLeksemв таблице разделителей. Если разделитель найден, то на выход подается пара: номер таблицыTableи индексIndex, иначе – сообщение об ошибке. Перевод головки лексического анализатора на одно состояние назад.

void SEPAR ( leks Leksem, int &Table, int &Index)

  • BOPER– ищет полученную лексемуLeksemв таблице бинарных операций. Если лексема найден, то на выход подается пара: номер таблицыTableи индексIndex, иначе – сообщение об ошибке. Перевод головки лексического анализатора на одно состояние назад.

void BOPER ( leks Leksem, int &Table, int &Index)

  • UOPER– – ищет полученную лексемуLeksemв таблице унарных операций. Если лексема найден, то на выход подается пара: номер таблицыTableи индексIndex, иначе – сообщение об ошибке. Перевод головки лексического анализатора на одно состояние назад.

void UOPER ( leks Leksem, int &Table, int &Index)

  • RELAT– – ищет полученную лексемуLeksemв таблице отношений. Если лексема найден, то на выход подается пара: номер таблицыTableи индексIndex, иначе – сообщение об ошибке. Перевод головки лексического анализатора на одно состояние назад.

void RELAT ( leks Leksem, int &Table, int &Index)

  • ASSIGN– – ищет полученную лексемуLeksemв таблице операторов присваивания. Если лексема найден, то на выход подается пара: номер таблицыTableи индексIndex, иначе – сообщение об ошибке. Перевод головки лексического анализатора на одно состояние назад.

void ASSIGN ( leks Leksem, int &Table, int &Index)

  • SEIO– – ищет полученную лексемуLeksemв таблице символов ввода/вывода. Если лексема найден, то на выход подается пара: номер таблицыTableи индексIndex, иначе – сообщение об ошибке. Перевод головки лексического анализатора на одно состояние назад.

void SEIO ( leks Leksem, int &Table, int &Index)

Тестирование лексического анализатора

Пример входной программы:

void main ()

{ int x = 7;

int y = 5;

if (x > y)

cout<<x;

else

cout<<y;

}

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

№ таблицы

индекс

значение

19

0

х

1

y

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

№ таблицы

индекс

значение

20

0

7

1

5

Выход лексического анализатора:

№ таблицы

Индекс

Лексема

№ таблицы

Индекс

Лексема

11

0

void

19

0

x

12

0

main

17

1

>

16

6

(

19

1

y

16

7

)

16

7

)

16

4

{

7

0

cout

8

0

int

18

1

<<

19

0

x

19

0

x

13

0

=

16

2

;

20

0

7

1

0

else

16

2

;

7

0

cout

8

0

int

18

1

<<

19

1

y

19

1

y

13

0

=

16

2

;

20

1

5

16

5

}

16

2

;

0

0

if

16

6

(