Процес створення компілятора вхідної мови
Поняття компілятора та теоретичні основи його роботи. Введення коду програми завантаженням текстового файлу. Опрацювання тексту лексичним та синтаксичним аналізаторами. Генерація та оптимізанія об'єктного коду. Побудова графічного інтерфейсу програми.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 22.01.2014 |
Размер файла | 586,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
{
// Спеціальна умова, ящо це корінь
if (parent == null)
{
root = nodeToDelete.right;
return;
}
if (parent.left == nodeToDelete)
parent.right = nodeToDelete.right;
else
parent.left = nodeToDelete.right;
nodeToDelete = null; // Очистка видаленого вузла
_count--;
return;
}
// Одне із посилань вузла null, тоді
// видаляємо вузол і виставляємо ненульове посилання на його місце
if (nodeToDelete.right == null)
{
// Спеціальна умова, ящо це корінь
if (parent == null)
{
root = nodeToDelete.left;
return;
}
if (parent.left == nodeToDelete)
parent.left = nodeToDelete.left;
else
parent.right = nodeToDelete.left;
nodeToDelete = null; // Очистка видаленого вузла
_count--;
return;
}
// Обидва посилання мають значення, тоді шукаємо наступника і
// заміняємо видалений вузол наступником
// Цей попередник стає попередником наступника
TTreeNode successor = findSuccessor(nodeToDelete, ref parent);
// Зробимо тимчасову копію вузла-наступника
TTreeNode tmp = new TTreeNode(successor.name, successor.value);
// Знайдемо, на яку гілку наступника вказує попередник
// і видалимо наступника
if (parent.left == successor)
parent.left = null;
else
parent.right = null;
// Повертаємо назад значення наступників
nodeToDelete.name = tmp.name;
nodeToDelete.value = tmp.value;
_count--;
}
// Функція схематичного малювання дерева
private string drawNode(TTreeNode node)
{
if (node == null)
return "empty";
if ((node.left == null) && (node.right == null))
return node.name;
if ((node.left != null) && (node.right == null))
return node.name + "(" + drawNode(node.left) + ", _)";
if ((node.right != null) && (node.left == null))
return node.name + "(_, " + drawNode(node.right) + ")";
return node.name + "(" + drawNode(node.left) + ", " + drawNode(node.right) + ")";
}
/// <summary>
/// Виводить вигляд дерева строкою, що виглядає як
/// 50(40(30(20, 35), 45(44, 46)), 60)
/// </summary>
/// <returns>Повертає вигляд дерева</returns>
public string drawTree()
{
return drawNode(root);
}
}
}
Додаток В
Структурний вигляд згенерованої COM-програми
;==ПАРАМЕТРИ COM-ФАЙЛУ==
.model tiny
.code
org 100h
.386
;==КОД ОСНОВНОЇ ЧАСТИНИ ПРОГРАМИ==
main: ;--Ініціалізація ES та DS, обнулення edx--
mov ax,cs
mov ds,ax
mov es,ax
xor edx,edx
;--Встановлення відеорежиму:
mov ah,00h
mov al,02h ;80x25 чорнобілий текстовий режим
int 10h
;--Ставимо курсор в початок координат:--
mov ah,02
mov bh,00 ;сторінка відеопам'яті
mov dh,0 ;строка
mov dl,0 ;стовпчик
int 10h
[тут йде згенерований код тіла програми, операції, виведення на екран і т.і.]
ret
;==КІНЕЦЬ ГОЛОВНОЇ ПРОГРАМИ==
;==ПОЧАТОК БЛОКУ ПРОЦЕДУР==
;--Функція виведення на екран строки (Використовувати LEA EDX,ім'яізмінної перед викликом):--
PSB proc ;Print String in Bios int
xor ecx,ecx
;--Підрахунок кількості символів:--
pks:
mov al,[EDX+ECX]
cmp al,"$"
je pksg
inc cx
mov i,cx
jmp pks
pksg:
xor esi,esi
psbd1:
;--Друк символу:--
mov ah,0Eh
mov al,[EDX+ESI] ;ASCII-код символу
mov bh,00;сторінка відеопам'яті
mov cx,01h
int 10h
;--команди циклу:--
inc si
cmp si,i
je psbd2
jmp psbd1
psbd2:
ret
PSB endp
;--Процедура переведення курсору на новий рядок:--
ENT proc
mov ah,03h
mov bh,00h
int 10h
mov ah,02h
mov bh,00h
inc dh
mov dl,00h
int 10h
ret
ENT endp
;--Ф-я виведення слова в шістнадцятковій системі (необх. слово заносимо в wpt перед використанням):--
WORDPRINT proc
pusha
mov cx,16d
l1:
sub cx,4h
mov ax, wpt
shr ax, cl
and ax,0fh ;маскою виділяємо молодший розряд
cmp al,9h
jbe pc ;cifra
cmp al,0Fh
jbe pb ;bukva
pc:
add al,30h
jmp prnt
pb:
add al,37h
jmp prnt
prnt:
mov asciitemp,al
call PSymB
jcxz l2
jmp l1
l2:
popa
ret
WORDPRINT endp
;--Функція виведення на екран символу (символ в asciitemp):--
PSymB proc
pusha
;--Друк Символа власною персоною:--
mov ah,0Eh
mov al,asciitemp
mov bh,00h
mov cx,01h
int 10h
popa
ret
PSymB endp
;--Виведення одного біту слова: (вик-є wpt - слово та n - номер біту)--
PBB proc
mov ax,wpt
mov bx,01h
mov cl,n
shl bx,cl ;Підготовка маски
and ax,bx;Накладання маски
mov al,30h ;Код нуля
jz endpbb
mov al,31h ;Код одиниці
endpbb:
;--Друк:--
mov ah,0Eh
mov bh,00h
mov cx,01h
int 10h
ret
PBB endp
;==КIНЕЦЬ БЛОКУ ПРОЦЕДУР==
;==ПОЧАТОК БЛОКУ ОГОЛОШЕННЯ ЗМІННИХ==
;змінні процедур:
i dw ?
n db ?
wpt dw ? ;wordprint temp
asciitemp db ?
;змінні тіла програми:
[сюди генератор заносить числові та строкові змінні]
;==КIНЕЦЬ БЛОКУ ОГОЛОШЕННЯ ЗМIННИХ==
end main
Размещено на Allbest.ru
Подобные документы
Методика розробки компілятору з вхідної мови програмування Pascal, оболонка, якого розроблена в середовищі програмування Borland C під операційну систему Windows. Блок-схема програми. Розробка оптимізатора та генератора коду. Тестування компілятора.
курсовая работа [218,6 K], добавлен 04.06.2011Огляд існуючих методів розробки компіляторів, детальний опис мови. Характеристика та специфіка процесу розробки програми компілятора на рівні блок-схем і тексту програми. Подання тексту компілятора, а також результатів тестування розробленої програми.
курсовая работа [510,2 K], добавлен 03.06.2011Побудова інформаційно-математичної моделі задачі. Визначення структури даних, розробка інтерфейсу. Складання коду програми за допомогою мови програмування Delphi 7.0. Реалізація проекту у візуальному середовищі. Інструкція з експлуатації програми.
курсовая работа [601,3 K], добавлен 03.09.2009Побудова інформаційно-математичної моделі та алгоритм задачі. Визначення структури даних. Розробка інтерфейсу програми з користувачем. Складання коду програми. Реалізація проекту у візуальному середовищі. Тестування та інструкція з експлуатації програми.
курсовая работа [1,3 M], добавлен 14.04.2009Розробка програми, яка вираховує з введених чисел парні та непарні та додає парні числа. Особливості синтаксису й семантики операторів мови С++. Перевірка коректності введення кількості чисел. Написання коду програми, проведення її тестування на прикладі.
лабораторная работа [860,5 K], добавлен 20.12.2012Вивчення складових частин, основних принципів побудови і функціонування компіляторів. Поняття хешування, сутність алгоритму роботи лексичного аналізатора. Практичне освоєння методів побудови простих компіляторів для заданої вхідної мови - Borland Delphi.
дипломная работа [763,6 K], добавлен 27.05.2013Основи Web-програмування. Використання мови HTML. Базові елементи HTML. Форматування тексту. Вирівнювання тексту та горизонтальна лінія. Значення RGB- коду. Таблиці та списки, посилання та робота з ними. Створення посилань на документи і файли.
курсовая работа [40,9 K], добавлен 12.02.2009Характеристика дослідження методу введення обмежених обсягів текстової інформації в ЕОМ. Аналіз механізму розробки програми, що передбачає можливість запису текстової інформації до файлу, а також завантаження тексту з файлу. Порядок роботи з програмою.
курсовая работа [74,1 K], добавлен 05.02.2010Розробка резидентної програми за допомогою мови асемблер, яка дозволить перехопити зміст текстового та графічного екрану у файл (відповідно TXT і BMP). Вибір та обґрунтування методу розв'язки даної задачі. Алгоритм і реалізація програми, системні вимоги.
курсовая работа [14,9 K], добавлен 08.08.2009Зчитування числової інформації з файлу DATA.txt, аналізування, обробка та виконання графічного відображення. Редагування файлу тексту програми. Метод відображення кнопки з надписом на екрані. Створення нових класів на основі інших, вже створених.
курсовая работа [196,2 K], добавлен 14.03.2013