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

4.4.9 Тестовый пример

Входная цепочка

void main()

{ int a;

vector b[3];

a=5;

b=[2.0, a, 4.1];

if(b[1]==a)

cout >> a;

}

Таблицы лексического анализатора

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

0

a

1

b

2

b1

3

b2

4

b3

таблица целочисленных констант(№25)

0

5

1

3

2

1

таблица вещественных констант (№26)

0

2.0

1

4.1

Представление в виде токенов

void main()

{ TypeBaseint ida ;

ida AssignRel = CI5 ;

vector idb [CI3];

idb AssignRel =[ CF2.0, ida, CF4.1];

if(idb [CI1] RelOperation == ida )

cout >> ida ;

}

Процесс формирования тетрад

Входная строка

Изменение в таблицах

Тетрада

TypeBase Ident ;

<int a;>

индекс

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

тип

значение

0

a

Номер таблицы

Индекс

Значение

8

0

int

1

float

2

bool

AddVar

8(0)

30(0)

30(0)тип

2

0 – это индексы соответствующих сущностей в своих таблицах, то есть

AddVar

int

a

aтип

VECTOR Ident[CI];

< vector b[3];>

индекс

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

тип

значение

0

a

*int

*5

1

b

*vector

*3

Номер таблицы

Индекс

Значение

6

0

vector

* указатель на 3- это указатель на размерность, то есть сколько последующих строк в таблице отводится под этот вектор

AddVec

6(0)

30(1)

30(1)тип

Ident AssignRel CI;

<a=5; >

индекс

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

тип

значение

0

a

*int

Номер таблицы

Индекс

Значение

25

0

5

1

3

2

1

=

30(0)

25(0)

30(0)значение

Что содержательно выглядит как

=

а

5

0значение

Ident AssignRel [CF,CF,CF];

< b=[2.0, a,4.1];>

индекс

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

тип

значение

0

a

*int

*5

1

b

*vector

2

*2.0

3

*a

4

*4.1

Номер таблицы

Индекс

Значение

26

0

2.0

1

4.1

=

30(2)

26(0)

30(2)значение

=

30(3)

30(0)

30(3)значение

=

30(4)

26(1)

30(4)значение

IF(CF RelOperation

Ident)

COUT>>Ident;

<if(b[1]==a)>

<cout >> a;>

индекс

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

тип

значение

0

a

*int

*5

1

b

*vector

2

*2.0

3

*a

4

*4.1

5

*5

6

1

Номер таблицы

Индекс

Значение

27

0

Lfalse

SUBS

30(1)

1

30(5)

==

30(5)

30(0)

30(6)

BF

Lfalse

30(6)

COUT>>

30(0)

DEFL

Lfalse

*работа идет непосредственно со значениями переменных и чисел

Таблицы синтаксического анализатора

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

индекс

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

тип

значение

0

A

*int

*5

1

B

*vector

2

*2.0

3

*a

4

*4.1

5

*5

6

1

Таблица меток

Индекс

Значение

0

Lfalse

Представление заданной программы в виде тетрад

=

30(0)

25(0)

30(0)

=

30(2)

26(0)

30(2)

=

30(3)

30(0)

30(3)

=

30(4)

26(1)

30(4)

SUBS

30(1)

1

30(5)

==

30(5)

30(0)

30(6)

BF

Lfalse

30(6)

COUT>>

30(0)

DEFL

Lfalse

Выводы

В ходе выполнения данной курсовой работы нами разработан некий язык программирования, являющийся подмножеством языка С. Мы научились задавать и описывать синтаксис и семантику рассматриваемого языка, получили первичные навыки по проектированию лексических анализаторов и построению транслирующих грамматик. Познакомились с основными методами транслирования и получили навыки по проектированию ДМП-процессоров заданной конфигурации.