- •Пояснительная записка к курсовой работе по дисциплине "Теория языков программирования"
- •2005 Отчет по курсовой работе тяп.
- •1 Описание входного языка
- •1.1 Задание
- •1.2 Синтаксис и семантика языка
- •1.2.1 Словарь и представление
- •1.2.2 Описания и области действия
- •1.2.3 Описания констант
- •1.2.4 Описания типов
- •1.2.5 Описания переменных
- •1.2.6 Выражения
- •1.2.6.1 Операнды
- •1.2.6.2 Операции
- •1.2.7 Операторы
- •2. Лексический анализ
- •2.1 Типы лекскем.
- •2.2 Диаграммы переходов
- •2.3 Структуры данных
- •2.4 Тестирование лексического анализатора
- •3 Синтаксический анализ и перевод во внутреннюю форму
- •3.1 Кс-грамматика входного языка
- •3.1.1 Основная грамматика.
- •3.1.2 Грамматика описывающая составной оператор.
- •3.1.3 Грамматика описывающая выражение
- •3.2 Диаграмма переходов
- •3.3 Описание промежуточного языка
- •3.4 Описание перевода
- •3.4.1 Атг для программы
- •3.4.2 Атг для оператора
- •3.4.3 Атг для выражения
- •3.4.4 Описание конструкций языка при помощи триад
- •3.5 Алгоритм работы дмп-процессора
- •3.6 Тестирование синтаксического анализатора
- •4 Генерация кода
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=Правила:
N1 program idc ; N3
N1 N3 .
N3 N16 operator
N3 operator
N7 idl , N7
N7 idl
N10 N8 N10
N10 N8
N12 Expression .. Expression
N12 idt
N12 boolmatr[Expression , Expression ]
N16 N18 N16
N16 labelN7 ;
N16 constN10
N16 typeN23
N16 var N26
N16 N19 N16
N16 N20 N16
N16 N21 N16
N18 labelN7 ;
N19 constN10
N20 typeN23
N21 var N26
N22 idt = N12 ;
N23 N22 N23
N23 idt = N12 ;
N25 idv , N25
N25 idv
N26 N25 : N12 ;
N26 N25 : N12 ; N2
N8 idc = Expression ;
N8 idc : N12 = Expression ;