- •Пояснительная записка к курсовой работе по дисциплине "Теория языков программирования"
- •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 Генерация кода
3.1.2 Грамматика описывающая составной оператор.
G2=<T,N,R,N1>
T=Терминалы : begin , end , idl , : , idv , goto , read , readln , write , writeln, ( , ) := , , , if , then , else, ; , repeat , until , Expression , str , [ , ]
N=Нетерминалы :
N1 = составной оператор 2 ;
N2 = операторы 6 ;
N3 = оператор 13 ;
N11 = список параметров write2 ;
N12 = параметр write2 ;
N4 = условный оператор 3 ;
R=Правила :
N1 beginN2 end
N1 begin if Expression then N3 end
N2 N3
N2 N3 ;
N2 N3 ; N2
N2 N4
N2 N4 ;
N2 N4 ; N2
N3 idl : N3
N3 idv :=Expression
N3 idv [Expression,Expression] :=Expression
N3 gotoidl
N3 write( N11 )
N3 writeln( N11 )
N3 write
N3 writeln
N3 repeatN2 untilExpression
N3 N1
N3 read( idv )
N3 readln( idv )
N11 N12
N11 N11, N12
N12 str
N12 Expression
N4 if Expression then N3 else N3
N4 ifExpressionthenN3
N4 if Expression then N3 else N4
3.1.3 Грамматика описывающая выражение
G3=<T,N,R,N2>
T=Терминалы :
idv idcidnnot-()anddivmodshlshr*/orxor+<><=>==<>[],Expression
N=Нетерминалы :
N2 = выражение 7;
N1 = множитель 8;
N3 = логическое умножение 2;
N4 = целое умножение 5;
N5 = умножение 3;
N6 = логическое выражение 3;
N7 = простое выражение 3;
R=Правила :
N2 N7
N1 idv
N1 idc
N1 idn
N1 idv [ N2 , N2 ]
N1 idv [Expression,Expression]
N1 not N1
N1 - N1
N1 ( N2 )
N3 N1 and N3
N3 N1
N4 N3 div N4
N4 N3 mod N4
N4 N3 shl N4
N4 N3 shr N4
N4 N3
N5 N4 * N5
N5 N4
N6 N5 or N6
N6 N5 xor N6
N6 N5
N7 N6 - N7
N7 N6 + N7
N7 N6
N2 N7 < N2
N2 N7 >N2
N2 N7 <= N2
N2 N7 >= N2
N2 N7<>N2
N2 N7 = N2
3.2 Диаграмма переходов
Lex – текущий входной символ
St –верхушка стека
S S1 – Чтение лексемы, поиск действия в управляющей таблице (верхушка стека, лексема)
S1 P – Занесение атрибутов терминалов в стек атрибутов, обработка операционных символов, находящихся в середине правой части правила.
S1 C – Вычисление атрибутов, обработка операционных символов, находящихся в конце правой части правила.
S1 F – Вывод полученного потока триад.
S1 E – Вывод ошибки, завершение работы.
P S1 – Чтение следующей лексемы.
C S1 – Чтение следующей лексемы.
С E – Вывод ошибки, завершение работы.
3.3 Описание промежуточного языка
Описание триад
Триада |
Семантика триады |
EQU B, A |
A:=BеслиAэлементboolmatr, то добавляетсяAGRX,Y(координаты ячейки матрицы) |
DEFL L, - |
Описание метки L |
JMPL L, - |
Безусловный переход на триаду с меткой L |
JMP m, - |
Безусловный переход на триаду с номером m |
READ X, T |
Получает значение Х с консоли, типа T |
WRITE X, - |
Выводит значение Xна консоль |
VAR V, T |
Объявляет переменную VтипаT. (если типboolmatr[M,N], то добавляетсяARGM,N) |
ADD A, B |
Сложение A + B |
SUB A, B |
Вычитание A – B |
DIV A, B |
Целочисленное деление AdivB |
MUL A, B |
Умножение A * B |
AND A, B |
Логическое-И AandB |
OR A, B |
Логическое-ИЛИ AorB |
XOR A, B |
Логическое исключение AxorB |
NOT A, - |
Логическое отрицание A |
SHL A, B |
Побитовый сдвиг влево A, наBбит, справа появляются 0 |
SHR A, B |
Побитовый сдвиг вправо A, наBбит, слева появляются 0 |
ELM M, X |
Элемент булевской матрицы M, используется с последовательной триадойARGY, -M[x,y] |
CE X, Y |
Вычисляет результат сравнения (X=Y) результат (true,false). |
CNE X, Y |
Вычисляет результат сравнения (X<>Y) результат (true,false). |
CL X, Y |
Вычисляет результат сравнения (X<Y) результат (true,false). |
CG X, Y |
Вычисляет результат сравнения (X>Y) результат (true,false). |
CLE X, Y |
Вычисляет результат сравнения (X<=Y) результат (true,false). |
CGE X, Y |
Вычисляет результат сравнения (X>=Y) результат (true,false). |
JFL L, E |
Переход на метку LеслиE=false |
JF M, E |
Переход на триаду с номером mеслиE=false |
ARG X, Y |
Интерпретируется, как дополнительный параметр для триады, за которой следует |