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

50 Таблица констант

тип

значение

1

10

2

3.34

3

‘a’

элемент списка полей содержит в себе данные об имени поля, его типе и значение этого поля

3.4. Спецификации функций лексического анализатора - идентификатор(лексема) – ищет идентификатор его в таблице ключевых слов. Если нашла, то пишет в выходной поток токен соответствующий лексеме, если не нашла, то вставляет идентификатор в таблицу идентификаторов и пишет в выходной потокid - целая константа(лексема, тип) – добавляет значение константы в таблицу, заносит туда ее тип и выводит в выходной потокc. - вещественная константа(лексема, тип) аналогично целой константе

- логическая константа(лексема, тип) добавляет значение константы в таблицу, заносит туда ее тип и выводит в выходной потокl. - оператор(лексема, тип) – ищет оператор в таблице, пишет в выходной поток соответствующий типу оператора токен - разделитель (лексема) - пишет в выходной поток токен(соответствует лексеме)

3.5. Результаты работы лексического анализатора

Пример программы на входном языке:

package dirmain;

class Test

{

int i = 1;

void main(String args)

{

double d = 2.3;

char c = ‘a’;

String s = “Hello!\n”;

while (i < 2 && c = = 97)

if (d > i)

write (s);

else

{

goto labelA;

labelA: i++;

}

}

}

Рассмотрим полученные динамические таблицы:

Таблица идентификаторов (ID):

Токен

id

Идентификатор

Тип

ID

0

dirmain

4

ID

1

Test

4

ID

2

i

0

ID

3

args

3

ID

4

d

1

ID

5

c

2

ID

6

s

3

ID

7

labelA

4

Таблица констант (ТКС):

Токен

id

Константа

CI

0

1

CR

1

2.3

CC

2

‘a’

CS

3

“Hello!\n”

CI

4

2

CI

5

97

Приведём результат работы (разбиение на токены):

KWPG ID0 SRSM //package dirmain;

KWCL ID1 //class Test

SRLCB //{

KWI ID2 AO CI0 SRSM // int i = 1;

KWVD KWMN SRLP KWS ID3 SRRP // void main(String args)

SRLCB // {

KWD ID4 AO CR1 SRSM // double d = 2.3;

KWC ID5 AO CC2 SRSM // char c = ‘a’;

KWS ID6 AO CS3 SRSM // String s = “Hello!\n”;

// while (i < 2 && c = = 97)

KWWL SRLP ID2 RLOP1 CI4 ALOP EQLOP0 CI5 SRRP

KWIF SRLP ID4 RLOP0 ID2 SRRP // if (d > i)

KWWR SRLP ID6 SRRP SRSM // write (s);

KWEL // else

SRLCB // {

KWGT ID7 SRSM // goto labelA;

ID7 SRCN ID2 UAOP0 SRSM // labelA: i++;

SRRCB// }

SRRCB// }

SRRCB//}

После окончания работы лексического анализатора имеется сформированный выходной поток токенов и заполненные таблицы идентификаторов и констант.