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

L-атрибутный детерминированный процессор с магазинной памятью, реализующий перевод, определяемый L-атрибутной транслирующей грамматикой в форме простого присваивания, входной грамматикой которого является LL(1)-грамматика, будет выглядеть так же, как и ДМП-преобразователь для разбора LL(1)-грамматик (см пп. 3.2)

Управляющая таблица разбора LL(1)-грамматики, построенная в пп. 3.2 должна быть преобразована путем добавления операционных символов в магазинный алфавит. При этом во множество отображений таблицы добавляется элемент «ВЫДАЧА», применяемый при любом символе на входной ленте и при операционном символе на вершине стека. Элемент (β, i) заменяется элементом (β, y), где y – цепочка операционных символов. При этом М(Х, а)= (β, y), если есть правило вывода Х→yβ.

Также каждый магазинный символ необходимо дополнить множеством полей для представления его атрибутов, а управляющую таблицу – действиями по вычислению атрибутов и записи их в соответствующие поля. Начальная конфигурация магазина – маркер дна и начальный символ грамматики.

В случае замены нетерминала Х в верхушке магазина в соответствии с управляющей таблицей М(Х, а)= (β, y) ДМП-процессор вталкивает в магазин цепочку символов β и выдает цепочку операционных символов y. При этом вычисляются атрибуты операционных символов, не вталкиваемых в магазин, и заполняются поля атрибутов магазинных символов и символов цепочки β.

В момент вталкивания символа в магазин в поле для каждого синтезированного атрибута и атрибута входного символа заносится указатель на связанный список полей, соответствующих унаследованным атрибутам, которым этот атрибут должен передаваться (в соответствии с атрибутными правилами грамматики), а поле для каждого унаследованного атрибута остается пустым.

Операция «ВЫБРОС» расширяется таким образом, что каждый атрибут текущего входного символа копируется во все поля из списка полей, на которые указывает соответствующее поле верхнего магазинного символа.

Операция «ВЫДАЧА» расширяется таким образом, что значения унаследованных атрибутов используются при выдаче символа в выходную цепочку, а значения синтезированных атрибутов вычисляются по атрибутным правилам грамматики и помещаются во все поля из списка полей, связанных с этим атрибутом.

Ниже приведена управляющая таблица («ВЫБРОС»= «в», (β, y) = (i), где i – номер правила с правой частью yβ).

ID

Lab

CN

CF

Str

I

F

EL

SE

MA

IN

VO

ID

FOR

GO

TO

PRIN

TF

SCANF

TYPEDE

CONST

VECTOR

Type

GOp

=

Add

Op

M

Op

Rel

Op

Un

Op

!

||

&&

(

)

{

}

[

]

,

;

Sep

ε

S

1

1

1

1

1

Decl

55

56

55

55

55

SOp

2

2

2

2

2

2

2

2

2

2

2

2

2

2

3

2

Op

5

4

5

5

5

5

5

5

5

6

5

5

5

5

5

Nop

17

17

17

12

13

14

16

15

17

17

11

10

17

DecT

7

DecT’

8

9

8

CopG

18

Cop

19

Cop'

20

CycOp

22

TrOp

25

InOp

26

OutOp

31

NPr

26

25

Pr

29

30

30

31

29

Exp

33

33

33

33

33

33

33

Exp'

35

35

36

34

35

37

37

37

Dis

38

38

38

38

38

38

38

Dis'

40

40

40

40

39

40

40

40

40

Con

41

41

41

41

41

41

41

Con'

43

43

42

43

43

43

43

43

43

43

Rel

44

44

44

44

44

44

Rel'

46

46

46

45

46

46

46

46

46

46

46

Sm

47

47

47

47

47

47

Sm'

49

49

49

48

49

49

49

49

49

49

49

49

Ml

51

50

50

53

54

52

51

Decl1

57

58

59

57

Decl1’

60

61

Decl1’’

62

63

Typ

74

73

Dim

75

Var

67

68

Var’

70

70

70

70

70

70

70

70

70

70

69

70

70

70

VecVal

64

Num

78

77

LNum

66

65

ElV

71

72

72

Ind

76

ID

в

Lab

в

CN

в

CF

в

Str

в

IF

в

ELSE

в

MAIN

в

VOID

в

FOR

в

GOTO

в

PRINTF

в

SCANF

в

TYPEDEF

в

CONST

в

VECTOR

в

Type

в

GOp

в

=

в

AddOp

в

MOp

в

RelOp

в

UnOp

в

!

в

||

в

&&

в

(

в

)

в

{

в

}

в

[

в

]

в

,

в

;

в

Sep

в

{NLab}

ВЫДАЧА {NLab}

{Printf }

ВЫДАЧА {Printf }

{Scanf }

ВЫДАЧА {Scanf }

{OrOp}

ВЫДАЧА {OrOp}

{GOp}

ВЫДАЧА {GOp}

{UnOp}

ВЫДАЧА {UnOp}

{AndOp}

ВЫДАЧА {AndOp}

{AddOp}

ВЫДАЧА {AddOp}

{RelOp}

ВЫДАЧА {RelOp}

{MOp}

ВЫДАЧА {MOp}

{NotOp}

ВЫДАЧА {NotOp}

{NVar}

ВЫДАЧА {NVar}

{NConst}

ВЫДАЧА {NConst}

{NVec}

ВЫДАЧА {NVec}

{NType}

ВЫДАЧА {NType}

{REl}

ВЫДАЧА {REl}

{PEl}

ВЫДАЧА {PEl}

{BFL }

ВЫДАЧА {BFL }

{BRL}

ВЫДАЧА {BRL}

{DEFL}

ВЫДАЧА {DEFL}

допуск