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

Основная грамматика

Нетерминалы:

PRG

программа

PR1

остаток 1 программы

PO

последовательность операторов

MSG

сообщение

MS1

остаток сообщения

OPS

описания

PR2

остаток 2 программы

O

оператор

O1

остаток 1 оператора

O2

остаток 2 оператора

O3

остаток 3 оператора

O’

остаток оператора

P

переменная

P1

остаток переменной

I1

остаток

OP

оператор присваивания

OP1

остаток 1 оператора присваивания

OP2

остаток 2 оператора присваивания

OP’

остаток оператора присваивания

F1

остаток 1 для for

F2

остаток 2 для for

F3

остаток 3 для for

U

условие

U1

остаток условия

Правила :

1) PRG ® OPS PR1 2) OPS ® e

3) PR1 ® void main ( ) { PR2 4) PR2 ® OPS PO }

5) PO ® O O' 6) O ® ;

7) O ® { PO } 8) O ® i O1

9) O ® printf ( MSG MS1 ) ; 10) O ® scanf ( P P1 ) ;

11) O ® goto i ; 12) O ® for ( F1

13) O' ® O O' 14) O' ® e

15) O1 ® : 16) O1 ® = O2

17) O1 ® [ V ] = O2 18) O2 ® i O3

19) O2 ® V ; 20) O3 ® = O2

21) O3 ® [ V ] = O2 22) MSG ® s

23) MSG ® V 24) MS1 ® , MSG MS1

25) MS1 ® e 26) P ® i I1

27) P1 ® , P P1 28) P1 ® e

29) I1 ® [ V ] 30) I1 ® e

31) OP ® i OP1 32) OP1 ® = OP2

33) OP1 ® [ V ] = OP2 34) OP2 ® V

  1. OP2 ® i OP1 36) F1 ® OP OP’ ; F2

37) F1 ® ; F2 38) F2 ® U ; F3

39) F2 ® ; F3 40) F3 ® OP OP’ ) O

41) F3 ® ) O 42) U ® V U1

    43) U1 ® , V U1 44) U1 ® e

    45) OP’ ® , OP OP’ 46) OP’ ® e

47) O ® if ( V ) O

Атрибутная грамматика.

1) Атрибутная грамматика для основной программы.

p - унаследованный

t - синтезированный

PRG ® OPS PR1

OPS ® e

PR1 ® void main ( ) { PR2

PR2 ® OPS PO }

PO ® O O'

O ® ;

O ® { PO }

O ® it1 O1p1

p1 ¬ t1

O ® printf ( MSG MS1 ) ;

O ® scanf ( P P1 ) ;

O ® goto it1 {перейти}A1 ;

A1 ¬ t1

O ® for ( F1

O' ® O O'

O' ® e

O1p1 ® : {метка}A1

A1 ¬ p1

O1p1 ® = O2t1 {присвоить}A1, A2

A1 ¬ p1

A2 ¬ t1

O1p1 ® [ Vt1 ] {смещение}A1, A2, R = O2t2 {присвоить}A3, A4

A1 ¬ p1

A2 ¬ t1

A3 ¬ R

A4 ¬ t2

O2t1 ® it2 O3p1, t3

p1 ¬ t2

t1 ¬ t3

O2t1 ® Vt2 ;

t1 ¬ t2

O3p1, t1 ® = O2t2 {присвоить}A1, A2

A1 ¬ p1

A2 ¬ t2

t1 ¬ t2

O3p1, t1 ® [ Vt2 ] {смещение}A1, A2, R = O2t3 {присвоить}A3, A4

A1 ¬ p1

A2 ¬ t2

A3 ¬ R

A4 ¬ t3

t1 ¬ t3

MSG ® st1 {печатать}A1

A1 ¬ t1

MSG ® Vt1 {печатать}А1

A1 ¬ t1

MS1 ® , MSG MS1

MS1 ® e

P ® it1 I1p1

p1 ¬ t1

P1 ® , P P1

P1 ® e

I1p1 ® [ Vt2 ] {считать}A1, A2

A1 ¬ p1

A2 ¬ t2

I1p1 ® e {считать}A1

A1 ¬ p1

OP ® it1 OP1p1, t1

p1 ¬ t1

OP1p1, t1 ® = OP2t2 {присвоить}A1, A2

t1 ¬ t2

A1 ¬ p1

A2 ¬ t2

OP1p1, t1 ® [ Vt2 ] {смещение}A1, A2, R = OP2t3 {присвоить}A3, A4

t1 ¬ t3

A1 ¬ p1

A2 ¬ t2

A3 ¬ R

A4 ¬ t3

OP2t1 ® Vt2

t1 ¬ t2

OP2t1 ® it2 OP1p2, t3

p1 ¬ t2

t1 ¬ t3

F1 ® OP OP’ ; F2

F1 ® ; F2

F2 ® {L1:} U {условие} ; F3

F2 ® {L1:}{условие} ; F3

F3 ® {L2:} OP OP’ {L3:} ) O {конец итерации} {L4:}

F3 ® {L2:} {L3:} ) O {конец итерации} {L4:}

U ® Vt1 {проверка}A1 U1

A1 ¬ t1

U1 ® , V t1{проверка}A1 U1

A1 ¬ t1

U1 ® e

OP’ ® , OP OP’

OP’ ® e

O ® if ( V ) O {else}

{перейти}A1

Генерируется триада jmp label, A

Параметр A фиктивный. Управление передается триаде по адресу label.

{метка}A1

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

{присвоить}A1, A2

Переменной по адресу A1 присваивается выражение A2. Если тип A1 - int а тип A2 - float или наоборот, то автоматически происходит преобразование типов.

Аномальные ситуации:

1) если тип A1 - vector а тип A2 - int или float.

2) если тип A2 - vector а тип A1 - int или float.

3) если тип A1 и A2 - vector и их размерности не совпадают.

{смещение}A1, A2, R

Результат есть адрес ячейки под номером А2 вектора по адресу А1.

{печатать}А1

На экран выводится значение переменной или строка по адресу A1.

Генерируется триада prn A1 , fict .

{считать}A1, A2

Информация считывается с клавиатуры в ячейку под номером A2 вектора по адресу A1 .

Генерируется триада scn A1, A2 .

{считать}A1

Информация считывается с клавиатуры и заносится в память по адресу A1 .

Генерируется триада scn A1, fict .

{конец итерации}

Генерируется триада

jmp L2

{условие}

Генерируется триада

jmp L3

{проверка}A1

Проверяется условие выхода из цикла while - генерируется следующая последовательность триад:

cmp A1, 1

jne L4

то есть при несоблюдении условий продолжения цикла его выполнение завершается.

{Li:}

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

{else}

Просматривается следующая лексема на входной цепочке и если это ключевое слово else, то рассматривается следующее продолжение правила для оператора if : else O. Соответственно в стек заносится операционный символ О и разбор продолжается.

Соседние файлы в папке Курсовая работа2