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

3.5 Неформальное описание перевода

Оператор

Формат оператора

Код операции

Операнд1

Операнд2

Результат

5*b

*

5

R2

R1

a || d

||

R1

R3

R

a=b[i]

REl

b

i

R1

=

R1

a

int a

AddVar

a

int

if <выражение>

< оператор>

else

< оператор>

<выражение >(результат в R)

BFL

Lelse

R

перевод <оператор>

BRL

Lend

DEFL

Lelse

перевод <оператор>

DEFL

Lend

if <выражение>

< оператор>

перевод <выражение > (результат в R)

BFL

Lend

R

перевод <оператор>

DEFL

Lend

(<выражение>)?

< выражение>:

< выражение>

перевод <выражение> (результат в R1)

BFL

Lelse

R1

перевод <выражение> (результат в R)

BRL

Lend

DEFL

Lelse

перевод <выражение> (результат в R)

DEFL

Lend

for(<выражение1>;

<выражение2>;

<выражение3>)

<оператор>

перевод <выражение1>

DEFL

Lcheck

перевод <выражение2> (результат в R1)

BFL

Lend

R1

BRL

Lbegin

DEFL

Lchange

перевод <выражение3>

BRL

Lcheck

DEFL

Lbegin

перевод <оператор>

BRL

Lchange

DEFL

Lend

    1. Построение транслирующей грамматики

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

33

32

33

34

35

36

37

S Decl void main() { SOp }

SOp Op SOp

SOp ε

Op Lab: NOp; {NLab}

Op NOp;

Op DecT;

DecT typedef DecT’

DecT’ Typ ID {NType}

DecT’ → vector [Dim] ID {NType}

NOp { SOp }

NOp COpG

NOp COp

NOp CycOp

NOp TrOp

NOp InOp

NOp OutOp

NOp Exp

COpG (Exp)? {BFL} Exp {BRL} {DEFL}: Exp {DEFL}

COp if (Exp) {BFL } Op COp’ {DEFL}

COp’ {BRL }{DEFL} else Op

COp’ ε

CycOp for (NEx; {DEFL} NEx; {BFL}{BRL}{DEFL}NEx {BRL}{DEFL}) Op {BRL}{DEFL}

NEx Exp

NEx ε

TrOp goto Lab {BRL}

OutOp printf ( Pr {Printf} NPr )

NPr , Pr NPr

NPr ε

Pr Var

Pr Num

Pr → Str

InOp scanf Var {Scanf}

Exp → Dis Exp’

Exp’ → || Dis {OrOp} Exp’

Exp’ → GOp Dis {GOp} Exp’

Exp’ → UnOp {UnOp} Exp’

Exp’→ ε

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

Dis → Con Dis’

Dis’ → && Con {AndOp} Dis’

Dis’ → ε

Con → Rel Con’

Con’ → AddOp Rel {AddOp} Con’

Con’ → ε

Rel → Sm Rel’

Rel’ → RelOp Sm {RelOp} Rel’

Rel’ → ε

Sm → Ml Sm’

Sm’ → MOp Ml {MOp} Sm’

Sm’ → ε

Ml → Num

Ml → Var

Ml → (Exp)

Ml → UnOp Ml {UnOp}

Ml → ! Ml {NotOp}

Decl Decl1; Decl

Decl ε

Decl1Typ ID {NVar} Decl1’

Decl1 → const Typ ID {NConst} Decl1’

Decl1 → vector ID Dim {NVec} Decl1’’

Decl1’ → = Num {GOp}

Decl1’ ε

Decl1’’ → = VecVal

Decl1’’ ε

VecVal → [ELV {PEl} LNum]

LNum → , ELV {PEl} LNum

LNum ε

Var ID Var’

Var VecVal {NVec}

Var’ → [ Ind ] {REl}

Var’ ε

ElV → ID

ElV Num

Typ → Type

Typ → ID

Dim → CN

Ind CN

Num → CF

Num CN