Скачиваний:
17
Добавлен:
01.05.2014
Размер:
381.95 Кб
Скачать

Перечисление лексем

Все лексемы разделены на следующие классы:

  • ключевые слова

  • однолитерные терминалы

  • двулитерные терминалы

  • идентификаторы

  • числовые константы

Таблица ключевых слов(0): Однолитерные символы(1): Двулитерные символы(2):

0

void

0

(

0

>=

1

main

1

)

1

<=

2

print

2

[

2

==

3

scan

3

]

3

!=

4

if

4

{

5

else

5

}

6

for

6

*

7

goto

7

/

8

const

8

+

9

int

9

-

10

float

10

;

11

fmatr

11

,

12

det

12

=

13

transpose

13

!

14

>

15

<

16

:

В процессе работы лексического анализатора строится таблица идентификаторов и таблицы числовых констант (таблица целых констант и таблица вещественных констант):

Таблица идентификаторов(3): Таблица целых констант(4): Таблица веществ. констант(5):

Номер идентификат.

Символьное значение

Номер

Числовое значение

Номер

Числовое значение

0

0

0

1

1

1

2

2

2

Максимальная длина идентификаторы ограничена 32 литерами. Числовые константы могут быть целого и вещественного типов (intиfloat).

Допускается вид вещественного числа:

  • с точкой в начале

  • с точкой в конце

  • в экспотенциальной форме.

Каждая лексема кодируется следующем образом:

тип лексической единицы

адрес

Тип - номер таблицы, адрес - номер в таблице.

Синтаксический анализ и перевод во внутреннюю форму

В процессе синтаксического анализа, строятся и модифицируется следующие таблицы:

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

Номер идентиф.

Класс идентиф.

Тип

Ссылка

0

1

2

Классы идентификаторов:

1 – переменная

2 – константы

3 – метка

Типы:

1 – целый (int)

2 – вещественный (float)

3 – матрица (fmatr)

4 – массив целых чисел

5 – массив вещественных чисел

Ссылка: для переменных, это ссылка на таблицу переменнных, для констант – на таблицу констант, для меток на таблицу меток.

Таблица меток (7)

Номер метки

Номер тетрады

0

1

Таблица переменных (6)

Тип

Атрибут

Размер (в байтах)

Адрес памяти

Cмещение

0

1

..

Таблица переменных содержит информацию о распределении памяти. Поле “Адрес памяти” хранит адрес переменной, относительно начала сегмента данных. “Смещение” служит для индексации элементов матриц и массивов (содержит ссылку на переменную, значение которой нужно прибавить к текущему адресу для доступа к элементу матрицы или массива). Поле “Атрибут” содержит информацию о размерностях массива и матриц.

Соседние файлы в папке kurs