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

2.4 Тестирование лексического анализатора

Входная программа.

program test;

const N=10;

var x:byte;

BM:boolmatr[1, N]; {boolean matrix}

tmp:shortint;

label mt;

begin

mt:

writeln('Input Matrix');

x:=1;

repeat

read(tmp);

if (tmp=0) then BM[1,x]:=false

else BM[1,x]:=true;

x:=x+1;

until x=N;

write('Repeat? (0/1) ');

read(tmp);

if tmp<>0 then goto mt;

end.

Выходной поток лексем.

w9c3 ;

w6 c4 r6 $ 10 Eps ;

w10 v1 : t2 ;

v2 : t7 [ $ 1 Eps , $ c4 Eps ] ;

v3 : t4 ;

w4 l1 ;

# w2

l1 :

o3 ( s1 ) ;

v1 o5 $ 1 Eps ;

w11

o2 ( v3 ) ;

w7 $ ( v3 r6 0 ) Eps w1 v2 [ $ 1 Eps , $ v1 Eps ] o5 $ c1 Eps w12 v2 [ $ 1 Eps , $ v1 Eps ] o5 $ c2 Eps ;

v1 o5 $ v1 a9 1 Eps ;

w8 $ v1 r6 c4 Eps ;

o1 ( s2 ) ;

o2 ( v3 ) ;

w7 $ v3 r5 0 Eps w1 w3 l1 ;

w13Eps.

Статические таблицы приведены в Приложении С.

Cостояние динамических таблиц.

Типы

Константы

Метки

Переменные

Строковые константы

Код

Имя

Код стандарт- ного типа

Код

Имя

Тип

Значение

Код

Имя

Код

Имя

Тип

Код

Имя

1

integer

1

1

true

6

0

1

mt

1

x

2

1

'Input Matrix'

2

byte

2

2

false

6

0

2

BM

7

2

'Repeat? (0/1) '

3

word

3

3

N

1

10

3

tmp

4

4

shortint

4

5

longint

5

6

boolean

6

7

boolmatr

7

3 Синтаксический анализ и перевод во внутреннюю форму

3.1 Кс-грамматика входного языка

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

G1=<T,N,R,N1>

T= ; , . , program , idc , idv , [ , idt , = , ] , idl , const , type , var , boolmatr , .. , Expression , operator , label , :

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

N1 = программа 2;

N3 = блок 2;

N7 = метки 2;

N8 = описание константы 2;

N10 = описание констант 2;

N12 = отрезок типа 3;

N16 = раздел описаний 8;

N18 = раздел описания меток 1;

N19 = раздел описания констант 1;

N20 = раздел описания типов 1;

N21 = раздел описания переменных 1;

N22 = описание типа 1;

N23 = описание типов 2;

N25 = описание переменной 2;

N26 = описание переменных 2;

R=Правила:

  1. N1 program idc ; N3

  2. N1 N3 .

  3. N3 N16 operator

  4. N3 operator

  5. N7 idl , N7

  6. N7 idl

  7. N10 N8 N10

  8. N10 N8

  9. N12 Expression .. Expression

  10. N12 idt

  11. N12 boolmatr[Expression , Expression ]

  12. N16 N18 N16

  13. N16 labelN7 ;

  14. N16 constN10

  15. N16 typeN23

  16. N16 var N26

  17. N16 N19 N16

  18. N16 N20 N16

  19. N16 N21 N16

  20. N18 labelN7 ;

  21. N19 constN10

  22. N20 typeN23

  23. N21 var N26

  24. N22 idt = N12 ;

  25. N23 N22 N23

  26. N23 idt = N12 ;

  27. N25 idv , N25

  28. N25 idv

  29. N26 N25 : N12 ;

  30. N26 N25 : N12 ; N2

  31. N8 idc = Expression ;

  32. N8 idc : N12 = Expression ;