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

Подграмматика объявлений

Терминалы :

id = id ; int = int ; num = num ;

flt = float ; fmt = fmatr ; ; = ; ;

, = , ; [ = [ ; ] = ] ;

dc = об_констан ;

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

DES = объявления 3 ; DVA = об_перем_и_масс 2 ;

DMT = об_матриц 1 ; TYP = тип 2 ;

LI = список_идентиф 2 ; LA = список_массивов 2 ;

IA = индекс_массива 2 ; LMT = список_матриц 2 ;

Правила :

1) DES -> DVA

2) DES -> DMT

3) DES -> dc

4) DVA -> TYP LI ;

5) DVA -> TYP LA ;

6) DMT -> fmt LMT ;

7) TYP -> int

8) TYP -> flt

9) LI -> LI , id

10) LI -> id

11) LA -> LA , id IA

12) LA -> id IA

13) IA -> [ num ]

14) IA -> IA [ num ]

15) LMT -> LMT , id [ num , num ]

16) LMT -> id [ num , num ]

Подграмматика объявления констант

Терминалы :

con = const ; int = int ; flt = float ;

num = num ; fnm = fnum ; id = индетифик ;

= = = ; ; = ; ; , = , ;

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

DC = объявл_констант 2 ; LC = список_констант 2 ;

LC1 = 2 ;

Правила :

1) DC -> con int LC ;

2) DC -> con flt LC1 ;

3) LC -> LC , id = num

4) LC -> id = num

5) LC1 -> LC1 , id = fnm

6) LC1 -> id = fnm

Подграмматика арифметических выражений

Терминалы :

( = ( ; ) = ) ; num = inum ;

fnm = fnum ; + = + ; - = - ;

* = * ; / = / ; det = det ;

var = переменная ; trn = транспонир ;

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

AEX = арифмет_выражен 3 ; T = слагаемое 3 ;

P = множитель 6 ;

Правила :

1) AEX -> AEX + T

2) AEX -> AEX - T

3) AEX -> T

4) T -> P

5) T -> T * P

6) T -> T / P

7) P -> ( AEX )

8) P -> det ( AEX )

9) P -> trn ( AEX )

10) P -> num

11) P -> fnm

12) P -> var

Подграмматика переменной

Терминалы :

[ = [ ; ] = ] ; , = , ;

id = индетифик ; aex = ар_выраж ;

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

VAR = переменная 3 ; IM = индекс_массива 2 ;

Правила :

1) VAR -> id

2) VAR -> id [ aex , aex ]

3) VAR -> id IM

4) IM -> [ aex ]

5) IM -> IM [ aex ]

Описание промежуточного языка.

Перевод условного оператора:

IF (логическое_выражение) оператор

Указанный оператор будет переводиться следующим образом:

логическое_выражение

переход_по_ложь m1

оператор

безусловный_переход m1

m1:

IF (логическое_выражение) оператор1 ELSE оператор2

Перевод:

логическое_выражение

переход_по_ложь m1

оператор1

безусловный_переход m2

m1:

оператор2

m2:

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

FOR (выражение1 ; выражение2; выражение3) оператор

Указанный оператор будет

переводиться следующим образом:

выражение1

m1:

выражение2

переход_по_ложь m4

безусловный_переход m3

m2:

выражение3

безусловный переход m1

m3:

оператор

безусловный_переход m2

m4:

При отсутствии некоторых параметров цикла необходимо обеспечить соответствующую семантику цикла с параметром

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