Разработка, отладка и тестирование программы для учебного языка высокого уровня Logic 3
Разработка транслятора программ на языке Logic 3, составление документации и тестирование. Лексический и синтаксический анализаторы листинга. Реализация подсистемы управления памятью с сегментной моделью адресации и механизмом замещения сегментов FIFO.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 09.06.2013 |
Размер файла | 392,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
Введение
1. Постановка задачи
2. Описание методов решения задач
2.1 Лексический анализатор
2.2 Синтаксический анализатор
2.3 ПОЛИЗ
2.4 Формирование списка триад
2.5 Оптимизация триад
3. Описание программы
3.1 Общие сведения
3.1.1 Обозначение и наименование программы
3.1.2 Требуемое программное обеспечение
3.1.3 Использованные языки программирования
3.2 Функциональное назначение
3.3 Описание логической структуры
3.4 Используемые технические средства
3.5 Вызов и загрузка программы
4. Руководство оператора
4.1 Назначение программы
4.2 Условия выполнения программы
4.2.1 Условия эксплуатации
4.2.2 Требования к составу и параметрам технических средств
4.2.3 Требования к программной и информационной совместимости
4.3 Выполнение программы
5. Программа и методика испытаний
5.1 Объект испытаний
5.2 Цель испытаний
5.3 Требования к программе
5.4 Требования к программной документации
5.5 Порядок, средства и методы испытаний
5.6 Тестирование программы
Заключение
Приложение А. Текст программы
Введение
Современные операционные системы состоят из нескольких подсистем, относящихся к различным видам деятельности операционной системы. К этим подсистемам относятся механизмы управления процессами, виртуальной памятью, файловые системы и другие аналогичные средства.
Целью данной курсовой работы является изучение существующих подходов к реализации подсистемы управления памятью, программная реализация подсистемы управления памятью с сегментной моделью адресации и механизмом замещения сегментов FIFO.
Также целью работы является составление документации на созданный программный продукт и проведение тестирования программы.
1. Постановка задачи
В рамках данного курсового проекта требуется разработать программу - транслятор программ на заданном языке (Logic 3).
Разрабатываемая программа должна выполнять следующие этапы трансляции:
§ этап лексического анализа;
§ этап синтаксического анализа методом LL(1);
§ этап трансляции выражений и операторов в ПОЛИЗ;
§ этап построения триад;
§ этап оптимизации триадметодом удаления общих подвыражений.
Грамматика языка Logic 3:
<программа>::=var<объявление><блок>
<объявление>::=<описание>|<описание>;<объявление>
<описание>::=<идент.>
<блок>::=begin<посл. операторов>end
<посл. операторов>::= <оператор>|<посл. операторов>;<оператор>|
<оператор>:=<переменная>:=<выражение>
<оператор>:= for<переменная>:=<выражение>to<целая константа>do<блок>
<выражение>::=<фактор>|<выражение>#<фактор>|!<фактор >
<фактор>::=<первичное>|<фактор>&<первичное>
<первичное>::=<идент.>|<константа>
<константа>::=<целая константа>
<целая константа>::=<число>
<число>::=<цифра>|<число><цифра>
<цифра>::=0|1|2|3|4|5|6|7|8|9
<идент.>::=<буква>|<идент.><буква>
<буква>::=A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
2. Описание методов решения задач
2.1 Лексический анализатор
logic транслятор синтаксис листинг
На этапе лексического анализа выполняется анализ исходного программного кода и формируется список лексем.
В исходной грамматике были выделены следующие типы лексем (Таблица 1):
Таблица 1. Типы лексем.
Лексема |
Код |
|
var |
0 |
|
; |
1 |
|
begin |
2 |
|
end |
3 |
|
:= |
4 |
|
for |
5 |
|
to |
6 |
|
do |
7 |
|
# |
8 |
|
! |
9 |
|
& |
10 |
|
<ID> |
11 |
|
<Const> |
12 |
|
$ |
13 |
Лексический анализ происходит под управлением таблицы переходов, построенной исходя из графа управляющего автомата.
2.2 Синтаксический анализатор
На этапе синтаксического анализа проверяется правильность операторов.
Для упрощения исходной грамматики были отброшены следующие правила:
<константа>::=<целая константа>
<целая константа>::=<число>
<число>::=<цифра>|<число><цифра>
<цифра>::=0|1|2|3|4|5|6|7|8|9
<идент.>::=<буква>|<идент.><буква>
<буква>::=A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z
Так как посимвольная обработка была произведена на этапе лексического анализа, поэтому <константа> и <идент.> теперь являются терминальными символами.
Таким образом, упрощенная грамматика LOGIC-3' имеет следующий вид:
<программа>::=var<объявление><блок>
<объявление>::=< идент.>|< идент.>; <объявление>
<блок>::= begin<посл. операторов>end
<посл. операторов>::= <оператор>|<посл. операторов>;<оператор>|
<оператор>:=< идент.>:=<выражение>
<оператор>:= for< идент.>:=<выражение>to<целая константа>do<блок>
<выражение>::=<фактор>|<выражение>#<фактор>|!<фактор >
<фактор>::=<первичное>|<фактор>&<первичное>
<первичное>::=<идент.>|<константа>
Закодируем грамматику:
P > vAB
A > i | i ; A
B > b K e
K > O | K ; O
O > i : = V
O > f i : = V t Q d B
V > F | V # F | ! F
F > W | F & W
W > i | c
Избавляемся от левой рекурсии:
1. K > O | K ; O
Результат:
K > O X
X > ; O X
X >е
2. F > W | F & W
Результат:
F > WY
Y > &WY
Y > е
3. V > F | V # F | ! F
Результат:
V > FZ | ! F Z
Z > #FZ
Z >е
Избавляемся от левой факторизации:
A > i | i ; A
Результат:
A > i Q
Q > ; A
Q >е
Пронумеруем правила грамматики:
1. P > vAB
2. A > i Q
3. Q > ; A
4. Q >е
5. B > bKe
6. K > O X
7. X > ; O X
8. X >е
9. O > i = V
10. O > f i = V t Q d B
11. V > FZ
12. V > ! F Z
13. Z > #FZ
14. Z >е
15. F > WY
16. Y > &WY
17. Y >е
18. W > i
19. W > c
Для построения управляющей таблицы М по заданной LL(1)-грамматике G(V,T,P,S) имеется следующий общий алгоритм[2]:
1. Eсли <A>::= r - правило номер i заданной грамматики, то M(<A>,a)= i для всех a (кроме "lambda"),являющихся терминальными префиксами цепочек, выводимых из r. Если таким префиксом может быть "lambda",то М(<A>,b)=i для всех b, являющихся терминальными символами, которые могут встречаться непосредственно справа от <A>.
2. M(a,a)="сдвиг" для всех a, принадлежащих Т.
3. M($,"lambda")="допуск".
4. Оставшиеся незаполненными элементы таблицы М получают значение "ошибка".
Алгоритм синтаксического анализа на основе LL(K)-грамматики относится к классу алгоритмов нисходящего разбора. Строкам управляющей таблицы М для грамматики G(V,T,P,S) ставятся в соответствие элементы множества V U T U $ ($-маркер дна стека), столбцам - элементы множества T U "lambda"("lambda" - пустая строка). Перед началом работы алгоритма в рабочий стек заносятся символы $ и S. Возможные значения элементов таблицы и их интерпретация алгоритмом разбора приведены в таблице 2.
Таблица 2. Интерпретация алгоритмом значений таблицы.
N п/п |
Значение элемента таблицы |
Интерпретация алгоритмом разбора |
|
1 |
Номер i порождающего правила грамматики |
Удаление символа из рабочего стека; запись этого символа в выходной стек; запись правой части правила номер i в рабочий стек справа налево, начиная с последнего символа |
|
2 |
"сдвиг" |
Удаление символа из рабочего стека; запись его в выходной стек; считывание следующего символа входной цепочки |
|
3 |
допуск |
Конец работы |
|
4 |
"ошибка" |
Вывод сообщения об ошибке; конец работы |
Управляющая таблица:
v |
i |
b |
e |
f |
t |
d |
c |
; |
= |
! |
# |
& |
$ |
||
P |
1 |
||||||||||||||
A |
2 |
||||||||||||||
Q |
4 |
4 |
3 |
4 |
|||||||||||
B |
5 |
||||||||||||||
K |
6 |
6 |
|||||||||||||
X |
8 |
8 |
7 |
8 |
|||||||||||
O |
9 |
10 |
|||||||||||||
V |
11 |
11 |
12 |
||||||||||||
Z |
14 |
14 |
13 |
14 |
|||||||||||
F |
15 |
15 |
|||||||||||||
Y |
17 |
17 |
16 |
17 |
|||||||||||
W |
18 |
19 |
|||||||||||||
v |
С |
||||||||||||||
i |
С |
||||||||||||||
b |
С |
||||||||||||||
e |
С |
||||||||||||||
f |
С |
||||||||||||||
t |
С |
||||||||||||||
d |
С |
||||||||||||||
c |
С |
||||||||||||||
; |
С |
||||||||||||||
= |
С |
||||||||||||||
! |
С |
||||||||||||||
# |
С |
||||||||||||||
& |
С |
||||||||||||||
$ |
D |
2.3 ПОЛИЗ
Польская инверсная запись (ПОЛИЗ) - это постфиксная запись операций. Она была предложена польским математиком Я. Лукашевичем, откуда и происходит ее название. В этой записи знаки операций записываются непосредственно за операндами. По сравнению с обычной (инфиксной) записью операций в польской записи операнды следуют в том же порядке, а знаки операций - строго в порядке их выполнения. Этот факт делает ее чрезвычайно удобной для вычисления выражений с помощью стека на компьютере.
При формировании ПОЛИЗа следует ввести понятия приоритетов операций (Таблица 3).
Таблица 3. Приоритеты операций.
Операция |
Приоритет |
|
! |
1 |
|
& |
2 |
|
# |
3 |
|
; |
1 |
|
= |
4 |
|
$ |
4 |
2.4 Формирование списка триад
При формировании списка триад будем использовать следующий формат триад:
<операция>(<операнд 1>,<операнд 2>)
В исходной грамматике имеются операции: ! &# =, а также метки, полученные при формировании ПОЛИЗа.
2.5 Оптимизация триад
Под оптимизацией будем понимать ряд преобразований, которые можно выполнять над программой с целью повышения эффективности объектного кода. Такие преобразования можно выполнять в различных блоках компилятора, но наиболее сложные из них обычно выполняются отдельным блоком оптимизации, включаемым в работу после синтаксического анализа.
Объектный код, над которым выполняются оптимизирующие преобразования, будем считать заданным в виде последовательности триад, состоящих из полей:
<метка> | <код операции> |<операнд 1>| <операнд 2>
Поле <метка> предназначено для идентификации составных частей циклов.
В курсовой работе оптимизация выполняется по методу удаления общих подвыражений.
Ниже рассмотрим данный метод более подробно.
Удаление общих подвыражений
Некоторая i-ая триада линейного списка считается лишней, если существует более ранняя идентичная ей j-ая триада, и никакая переменная, от которой зависит результат этой триады, не изменяется третей триадой, лежащей между i-ой и j-ой(1-3).
Для того чтобы следить за внутренней зависимостью переменных и триад, поставим им в соответствие поставим им числа зависимости по следующим правилам.
1. Вначале для всех переменных объектного кода числа зависимости dep(<переменная>) равны 0.
2. После обработки i-ой триады, в которой переменной A присваивается некоторое значение, dep(A) меняется на i.
3. При обработке i-ой триады ее число зависимости dep(Ti) равно 1+<максимальное из чисел зависимости ее операндов>.
Полученные числа зависимости используются следующим образом:
если i-ая триада идентична j-ой триаде (j<i), тогда i-ая триадасчитается лишней в том и только том случае, когда dep(i)=dep(j).
3. Описание программы
3.1 Общие сведения
Данная программа была разработана в учебных целях. Служит для ознакомления пользователя с процессом трансляции.
3.1.1 Обозначение и наименование программы
Название программы - Compiler.
3.1.2 Требуемое программное обеспечение
Для компиляции исходного текста программы необходима среда визуального программирования NetBeans IDE + пакет Java Development Kit (JDK)v1.5 и выше.
Исполняемый модуль работает в 32-х разрядных операционных системах Windows (/2k/XP/Vista/Seven)и UNIX.
3.1.3 Использованные языки программирования
Программное средство было написано на языке Java в среде программирования NetBeansIDE.
3.2 Функциональное назначение
Программа выполняет функции транслятора для программ, написанных по правилам языка Logic 3.
3.3 Описание логической структуры
Процесс трансляции представляет собой последовательно выполняющиеся блоки лексического анализа, синтаксического анализа, трансляции в ПОЛИЗ, получении триад, их оптимизации. Входными данными для блока лексического анализа является входной текст (программа на языке Logic 3) и, построенная на основе графа, таблица состояний автомата, управляющего лексическим анализом. На выходе формируется таблица лексем и входная строка. Блок синтаксического анализа проверяет принадлежность входной строки к грамматике языка Logic3 на основании управляющей таблицы и таблицы кодирования. Блок формирования ПОЛИЗ представляет входную строку в виде ПОЛИЗ, основываясь на списке приоритетов операций. Триады формируются на основании полученной ПОЛИЗ. На основании списка триад производится оптимизация. Оптимизация будет производиться несколько раз, до тех пор, пока результат очередной оптимизации ничем не будет отличаться от результата предыдущей оптимизации.
Исходя из этого, можно построить структурную схему транслятора:
В программе используются следующие процедуры и функции:
Имя. |
Описание. |
|
public static void main(String[] args) |
Основной метод, с помощью которого выполняется запуск программы. |
|
Frame () |
Конструктор. Выполняет прорисовку всех элементов графического интерфейса. |
|
public void actionPerformed (ActionEvent e) |
Метод обрабатывающий реакцию на событие (нажатие кнопки). Параметр е - текущее событие. |
|
public void repaint () |
Выполняет обновление содержимое таблиц интерфейса программы. |
|
LA_returnStructure Analyser (String input) |
Выполняет лексический анализ. Параметр input - входная строка (Вводится в интерфейсе программы). В случае обнаружения неверной лексемы (нет конечного символа, неверный символ) формирует признак ошибки. |
|
SA_returnStructure Analyzer (String Line) |
Функция выполняет блок синтаксического анализа. Входные данные - строка, содержащая цепочку лексем, полученных в результате работы блока лексического анализа. Выходными данными является выходной и рабочий стек. |
|
String pol (String Line) |
Входные данные - цепочка лексем, полученная в результате работы блока лексического анализа. Выходные данные - строка содержащая ПОЛИЗ. |
|
Vector getTriads (String PolishNotation) |
Функция формирует список триад. Входные данные - ПОЛИЗ |
|
Vector <T_returnStructure>Optimizer (Vector<T_returnStructure> Triads) |
Функция выполняет оптимизацию списка триад. Входные данные - данные, полученные в результате выполнения метода getTriads - список триад. |
3.4 Используемые технические средства
Для управления программой необходимы устройства ввода: клавиатура, мышь. Требуемый объем оперативной памяти: не менее 10 Мб.
Для качественного отображения графического интерфейса требуются видеокарта с объемом памяти не менее 8 Мб и монитор, поддерживающий разрешение 800x600. Программа требует 200 Кб свободного места на жестком диске.
3.5 Вызов и загрузка программы
Так как разработанное программное обеспечение реализовано в виде отдельного модуля, для его использования необходимо написать и вызывать на исполнение соответствующую программную оболочку.
Для вызова программы достаточно запустить JAR-файл Compiler.jar.
Для успешного запуска программы необходимо наличие в системе установленного пакета Java Development Kit (JDK)v1.5 и выше.
4. Руководство оператора
4.1 Назначение программы
Разработанное программное средство предназначено для трансляции программ, написанных по правилам языка Logic 3.
Разработанное программное средство является автономным графическим Win32-приложением.
4.2 Условия выполнения программы
Для выполнения программы необходимо, чтобы программно-аппаратная часть используемой ЭВМ удовлетворяла нижеприведенным требованиям.
4.2.1 Условия эксплуатации
Разработанное программное средство не является устойчивым к ошибкам со стороны аппаратного или программного обеспечения.
При работе с программным продуктом должны соблюдаться условия эксплуатации IBM PC-совместимых машин, а также выполняться требования к составу и параметрам технических средств и информационной и программной совместимости, приведенным в последующих подразделах.
4.2.2 Требования к составу и параметрам технических средств
Гарантируется, что программное средством будет функционировать в вычислительной системе, удовлетворяющей требованиям Windows 2000.
Требования к аппаратному обеспечению, предъявляемые операционной системой Microsoft® Windows® 2000, приведены в Microsoft® Win32® Software Development Kit в разделе Win32 Programming Techniques; ниже перечислены только те требования, выполнение которых необходимо для работы с программным средством:
§ наличие процессора Intel386™ или совместимого (для систем на базе процессора Intel386™ рекомендуется наличие сопроцессора);
§ наличие 16мегабайт оперативной памяти;
§ видеоадаптер VGA, обеспечивающий разрешение экрана не менее 800600 пикселей при глубине цвета не менее восьми бит на пиксель для настольных систем и шестидесяти четырёх оттенков серого цвета для мобильных систем;
§ ~1 мегабайт дискового пространства для размещения программного продукта.
4.2.3 Требования к программной и информационной совместимости
Программное средство работает на операционных системах Windows линейки NT (Windows NT/XP/2000/2003/Vista/Seven). Также приложение полностью совместима с ОС UNIX.
4.3 Выполнение программы
Для вызова программы достаточно запустить JAR-файл Compiler.jar.
В результате запуска программы на экране появляется окно транслятора (Рисунок 2).
Рисунок 2. Главное окно программы.
Окно программы состоит из 5 областей (блоков):
1) лексический анализатор;
2) синтаксический анализатор;
3) преобразование в ПОЛИЗ;
4) преобразование ПОЛИЗа в триады;
5) оптимизация.
Блоки 1 - 3 могут работать автономно. При этом пользователю необходимо указать входные данные в интерфейсе программы.
На вход 4-го блока поступает информация с выхода 3-го блока. Выполнение 5-го блока возможно лишь после преобразования ПОЛИЗа в триады.
Каждый блок запускается после нажатия соответствующей кнопки, расположенной в области этого блока.
5. Программа и методика испытаний
5.1 Объект испытаний
Объектом испытаний является разработанный модуль трансляции программ, написанных по правилам языка Logic 3.
5.2 Цель испытаний
Целью испытаний является установление степени работоспособности разработанного модуля.
5.3 Требования к программе
Требования к программе приведены в одноименном разделе описания программы и повторно не приводятся.
5.4 Требования к программной документации
Программной документацией является пояснительная записка к курсовому проекту по дисциплине "Системное программное обеспечение".
Пояснительная записка должна включать следующие разделы:
- Введение
- Постановка задачи
- Описание методов решения задач
- Описание программы (в соответствии с ГОСТ 19.402-78)
- Руководство оператора (в соответствии с ГОСТ 19.505-79)
- Программа и методика испытаний (в соответствии с ГОСТ 19.301-79)
- Заключение
- Приложения
Пояснительная записка должна быть оформлена в соответствии с ДСТУ 3008-95, ГОСТ 19.105-78, ГОСТ 19.106-78.
5.5 Порядок, средства и методы испытаний
Каждая кнопка на форме программы соответствует определённой функции транслятора. Для проверки работоспособности функций рекомендуется их проверять на различных (в том числе и некорректных) входных данных.
Модуль считается работоспособным, если все тесты были успешно пройдены, и неработоспособным в противном случае.
5.6 Тестирование программы
Заключение
В процессе работы над курсовым проектом была спроектирован и реализован программный модуль - транслятор для программ, написанных по правилам языка Logic 3 (см. Постановка задачи).
Был изучен принцип построения транслятора, включающего следующие этапы трансляции: лексический анализ, синтаксический анализ, ПОЛИЗ, построение и оптимизация триад. Кроме того, были освоены основные приемы написания программ такого рода, пополнены знания в области применения языка высокого уровня Java.
В конце работы было проведено тестирование программы, в ходе которого существенных недостатков выявлено не было.
Таким образом, можно считать, что цель курсовой работы достигнута. Полученные знания могут быть применимы для дальнейших, более серьёзных разработок.
Приложение А. Текст программы
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import javax.swing.border.Border;
import javax.swing.border.*;
public class Frame implements ActionListener
{
private JMenu jmFile,jmHelp;
private JMenuItem jmiOpen,jmiExit,jmiAbout;
private ImageIcon imOpen,imExit,imAbout,imNext,imStart;
private JTextArea jta1,jta2;
private JTextField jtf1,jtf2,jtf3,jtf4;
private JScrollPane jsp1,jsp2,jsp3,jsp4,jsp5,jsp6;
private JButton jb1,jb2,jb3,jb4,jb5,jb6;
private JLabel jl1,jl2,jl3,jl4,jl5,jl6,jl7,jl8;
private JRadioButton jrb1,jrb2;
private JTable jt1,jt2,jt3,jt4,jt5;
private int count = 0;
private int save = 0;
SA_returnStructure n;
Vector <Vector> Stack = new Vector<Vector>();
public Frame()
{
JFrame frm = new JFrame("Compiler");
Image frmImage = Toolkit.getDefaultToolkit().getImage("icons\\frmIcon.jpeg");
frm.setIconImage(frmImage);
frm.setSize(1095,740);
frm.setLayout(new FlowLayout(FlowLayout.LEFT,2,2));
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frm.setLocation((screenSize.width - frm.getWidth()) / 2,(screenSize.height - frm.getHeight()) / 4); // Расположениеокна.
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.setResizable(false);
Font fnt_1 = new Font ("Arial",Font.BOLD,12);
Font fnt_2 = new Font ("Times New Roman",Font.PLAIN,14);
JMenuBar jmb = new JMenuBar();
jmFile = new JMenu ("File");
imOpen = new ImageIcon ("icons\\open.png");
jmiOpen = new JMenuItem ("Open",imOpen);
jmiOpen.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,InputEvent.CTRL_MASK));
jmiOpen.addActionListener (this);
jmFile.add(jmiOpen);
imExit = new ImageIcon ("icons\\exit.png");
jmiExit = new JMenuItem ("Exit",imExit);
jmiExit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_E,InputEvent.CTRL_MASK));
jmiExit.addActionListener (this);
jmFile.add(jmiExit);
jmb.add(jmFile);
jmHelp = new JMenu ("Help");
imAbout = new ImageIcon ("icons\\info.png");
jmiAbout = new JMenuItem ("About",imAbout);
jmiAbout.setAccelerator(KeyStroke.getKeyStroke("F1"));
jmiAbout.addActionListener (this);
jmHelp.add(jmiAbout);
jmb.add(jmHelp);
frm.setJMenuBar(jmb);
GridBagConstraints gbc;
GridBagLayout MyLayout = new GridBagLayout();
JPanel LexicalAnalyzer = new JPanel();
Border LexicalBorder = BorderFactory.createTitledBorder("ЛЕКСИЧЕСКИЙАНАЛИЗАТОР");
LexicalAnalyzer.setBorder(LexicalBorder);
LexicalAnalyzer.setLayout(MyLayout);
jl1 = new JLabel ("Исходная программа !");
jl1.setFont (fnt_1);
gbc = new GridBagConstraints();
LexicalAnalyzer.add (jl1,gbc);
jl2 = new JLabel ("Таблицалекем !");
jl2.setFont (fnt_1);
gbc.gridwidth = GridBagConstraints.REMAINDER;
LexicalAnalyzer.add (jl2,gbc);
jta1 = new JTextArea (15,15);
jta1.setFont (fnt_2);
jsp1 = new JScrollPane (jta1);
gbc = new GridBagConstraints();
gbc.insets = new Insets (5,5,5,5);
LexicalAnalyzer.add (jsp1,gbc);
jt1 = createTable (0);
jt1.setPreferredScrollableViewportSize(new Dimension(200,238));
jsp2 = new JScrollPane (jt1);
jsp2.getViewport().setBackground(Color.WHITE);
gbc.gridwidth = GridBagConstraints.REMAINDER;
LexicalAnalyzer.add (jsp2,gbc);
jl5 = new JLabel (" Ход выполнения:");
jl5.setFont (fnt_1);
ButtonGroup bg = new ButtonGroup();
jrb1 = new JRadioButton ("Выполнить автоматически !",true);
bg.add(jrb1); // Добавить в группу !
jrb2 = new JRadioButton ("Выполнить пошагово !");
bg.add(jrb2); // Добавить в группу !
Box box1 = Box.createVerticalBox();
box1.setBorder(BorderFactory.createEmptyBorder (0,5,5,5));
box1.add (jl5); box1.add (jrb1); box1.add (jrb2);
gbc = new GridBagConstraints();
gbc.insets = new Insets (5,5,5,5);
LexicalAnalyzer.add (box1,gbc);
Dimension btnDim = new Dimension (130,35);
imStart = new ImageIcon ("icons\\start.png");
jb1 = new JButton ("S T A R T",imStart);
jb1.setPreferredSize (btnDim);
jb1.addActionListener (this);
LexicalAnalyzer.add (jb1,gbc);
frm.add (LexicalAnalyzer);
JPanel SyntaxAnalyzer = new JPanel();
Border SyntaxBorder = BorderFactory.createTitledBorder("СИНТАКСИЧЕСКИЙАНАЛИЗАТОР");
SyntaxAnalyzer.setBorder(SyntaxBorder);
SyntaxAnalyzer.setLayout(MyLayout);
jl3 = new JLabel ("Таблицаразбора !");
jl3.setFont (fnt_1);
gbc = new GridBagConstraints();
SyntaxAnalyzer.add (jl3,gbc);
jl4 = new JLabel ("Выходнойстек !");
jl4.setFont (fnt_1);
gbc.gridwidth = GridBagConstraints.REMAINDER;
SyntaxAnalyzer.add (jl4,gbc);
jt3 = createTable (2);
jt3.setAlignmentX(10);
jt3.setPreferredScrollableViewportSize(new Dimension(450,238));
jt3.getColumnModel().getColumn(0).setPreferredWidth(300);
jt3.getColumnModel().getColumn(1).setPreferredWidth(10);
jsp3 = new JScrollPane (jt3);
jsp3.getViewport().setBackground(Color.WHITE);
gbc = new GridBagConstraints();
gbc.insets = new Insets (5,5,5,5);
SyntaxAnalyzer.add (jsp3,gbc);
jta2 = new JTextArea (15,15);
jta2.setFont (fnt_2);
gbc.gridwidth = GridBagConstraints.REMAINDER;
jsp4 = new JScrollPane (jta2);
SyntaxAnalyzer.add (jsp4,gbc);
Box box2 = Box.createVerticalBox();
box2.setBorder(BorderFactory.createEmptyBorder (5,5,5,5));
jl6 = new JLabel ("Входная строка:");
jl6.setFont (fnt_1);
jtf2 = new JTextField (56);
box2.add (jl6);
box2.add (Box.createRigidArea(new Dimension (0,5)));
box2.add (jtf2);
box2.add (Box.createRigidArea(new Dimension (0,20)));
gbc = new GridBagConstraints();
gbc.insets = new Insets (0,5,5,5);
SyntaxAnalyzer.add (box2,gbc);
jb2 = new JButton ("R U N",imStart);
jb2.setPreferredSize (btnDim);
jb2.addActionListener (this);
SyntaxAnalyzer.add (jb2,gbc);
frm.add (SyntaxAnalyzer);
JPanel PlishNotatoin = new JPanel();
Border PolishBorder = BorderFactory.createTitledBorder("ПРЕОБРАЗОВАНИЕВПОЛИЗ");
PlishNotatoin.setBorder(PolishBorder);
PlishNotatoin.setLayout(MyLayout);
gbc = new GridBagConstraints();
gbc.insets = new Insets (15,5,5,5);
jl7 = new JLabel ("Входная строка: ");
jl7.setFont (fnt_1);
PlishNotatoin.add (jl7,gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
jtf3 = new JTextField (34);
PlishNotatoin.add (jtf3,gbc);
gbc = new GridBagConstraints();
gbc.insets = new Insets (15,5,5,5);
jl8 = new JLabel ("Выходнаястрока:");
jl8.setFont (fnt_1);
PlishNotatoin.add (jl8,gbc);
gbc.gridwidth = GridBagConstraints.REMAINDER;
jtf4 = new JTextField (34);
PlishNotatoin.add (jtf4,gbc);
gbc.insets = new Insets (15,5,15,5);
gbc.gridwidth = GridBagConstraints.REMAINDER;
jb4 = new JButton ("ВЫПОЛНИТЬ",imStart);
jb4.setPreferredSize (btnDim);
jb4.addActionListener (this);
PlishNotatoin.add (jb4,gbc);
gbc.insets = new Insets (100,0,0,0);
PlishNotatoin.add (new JLabel(""),gbc);
frm.add (PlishNotatoin);
JPanel Triads = new JPanel();
Dimension btnDim1 = new Dimension (170,35);
Border TriadBorder = BorderFactory.createTitledBorder("ПРЕОБРАЗОВАНИЕПОЛИЗАВТРИАДЫ");
Triads.setBorder(TriadBorder);
Triads.setLayout(MyLayout);
gbc = new GridBagConstraints();
jt4 = createTable (3);
jt4.setPreferredScrollableViewportSize(new Dimension(314,155));
jsp5 = new JScrollPane (jt4);
jsp5.getViewport().setBackground(Color.WHITE);
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.insets = new Insets (1,1,1,1);
Triads.add (jsp5,gbc);
gbc.insets = new Insets (15,5,15,5);
jb5 = new JButton ("ПРЕОБРАЗОВАТЬ",imStart);
jb5.setPreferredSize (btnDim1);
jb5.addActionListener (this);
Triads.add (jb5,gbc);
frm.add (Triads);
JPanel Optimization = new JPanel();
Border OptBorder = BorderFactory.createTitledBorder("ОПТИМИЗАЦИЯ");
Optimization.setBorder(OptBorder);
Optimization.setLayout(MyLayout);
gbc = new GridBagConstraints();
jt5 = createTable (4);
jt5.setPreferredScrollableViewportSize(new Dimension(314,155));
jsp6 = new JScrollPane (jt5);
jsp6.getViewport().setBackground(Color.WHITE);
gbc.gridwidth = GridBagConstraints.REMAINDER;
gbc.insets = new Insets (1,1,1,1);
Optimization.add (jsp6,gbc);
gbc.insets = new Insets (15,5,15,5);
jb6 = new JButton ("ОПТИМИЗИРОЗОВАТЬ",imStart);
jb6.setPreferredSize (btnDim1);
jb6.addActionListener (this);
Optimization.add (jb6,gbc);
frm.add (Optimization);
JPanel jp_status = new JPanel();
jp_status.setLayout(new BorderLayout());
JLabel jl = new JLabel(" Программазапускается... Готово!");
jl.setPreferredSize (new Dimension(1080,15));
jp_status.add(jl, BorderLayout.CENTER);
jp_status.setBorder(new BevelBorder(BevelBorder.LOWERED));
frm.add(jp_status,BorderLayout.SOUTH);
frm.setVisible(true);
}
JTable createTable (final int NUMBER) //Созданиетаблицы.
{
final String TABLE1 [] = {"Лексема","Код"};
final String TABLE2 [] = {"Рабочийстек","SMB","M(<A>,a)"};
final String TABLE3 [] = {"Триада","КОП","ОП 1","ОП 2"};
TableModel tm = new AbstractTableModel()
{
public int getColumnCount()
{
switch (NUMBER)
{
case 0: return TABLE1.length;
case 1: return Lexical_Analyzer.Table.get(0).size();
case 2: return TABLE2.length;
case 3: return TABLE3.length;
case 4: return TABLE3.length;
default: return 0;
}
}
public int getRowCount()
{
switch (NUMBER)
{
case 0: return Lexical_Analyzer.Result.size();
case 1: return Lexical_Analyzer.Table.size();
case 2: return Syntax_Analyzer.Stack_o.size();
case 3: if (Triads.Triads != null) return Triads.Triads.size();
else return 0;
case 4: if (Optimization.OptTriads != null) return Optimization.OptTriads.size();
else return 0;
default: return 0;
}
}
public String getColumnName(int col)
{
switch (NUMBER)
{
case 0: return TABLE1[col];
case 1: return "'" + Character.toString(Lexical_Analyzer.Terms[col]) + "'";
case 2: return TABLE2[col];
case 3: return TABLE3[col];
case 4: return TABLE3[col];
default: return "";
}
}
public Object getValueAt(int row, int col)
{
String Result = new String("");
switch (NUMBER)
{
case 0: String Value [] = Lexical_Analyzer.Result.get(row).split(",");
return Value[col];
case 1: int code = Lexical_Analyzer.Table.get(row).get(col);
if (col == 0)
{
if (row == 0) Result = "H";
else Result = 'S' + Integer.toString (row);
}
else
{
if (code == 0) Result = "H";
else
if (code == -1) Result = "E";
else
if (code < 99) Result = 'S' + Integer.toString (code);
else
if (code > 99) Result = Integer.toString (code - 100);
else
if (code == 99) Result = "K";
}
return Result;
case 2: if(col==0) return " " + Stack.get(row).get(0).toString();
else
if(col==1) return " " + Stack.get(row).get(1).toString();
else
return " " + Stack.get(row).get(2).toString();
case 3: if(Triads.Triads.size() > 0)
{
if(col==0) return " " + Triads.Triads.get(row).triad;
else
if(col==1) return " " + Triads.Triads.get(row).CodeOP;
else
if(col==2) return " " + Triads.Triads.get(row).OP1;
else
if(col==3) return " " + Triads.Triads.get(row).OP2;
}
else return "";
case 4: if(Optimization.OptTriads.size() > 0)
{
if(col==0) return " " + Optimization.OptTriads.get(row).triad;
else
if(col==1) return " " + Optimization.OptTriads.get(row).CodeOP;
else
if(col==2) return " " + Optimization.OptTriads.get(row).OP1;
else
if(col==3) return " " + Optimization.OptTriads.get(row).OP2;
}
else return "";
default: return -1;
}
}
public Class getColumnClass(int c)
{
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col)
{
return false;
}
};
JTable t = new JTable(tm);
t.setColumnSelectionAllowed(false); // Запретить выделять колонки.
t.setRowSelectionAllowed(false); // Запретить выделять строки.
t.getTableHeader().setReorderingAllowed(false); // Запретить перемещать колонки.
t.getTableHeader().setResizingAllowed(false); // Запретить менять ширину колонки.
t.scrollRectToVisible(t.getCellRect(t.getRowCount() - 1, 1, true));
DefaultTableCellRenderer r = (DefaultTableCellRenderer) t.getDefaultRenderer (String.class);
if (NUMBER != 2) r.setHorizontalAlignment (JLabel.CENTER); // Выравнивание текста.
return t;
}
public void Error (int index)
{
String message; // Сообщение.
ImageIcon Normal = new ImageIcon ("icons\\comp.png");
ImageIcon Error = new ImageIcon ("icons\\error.png");
switch (index)
{
case 0: message = "П р о г р а м м а в ы п о л н е н а у с п е ш но ! ! !";
JOptionPane.showMessageDialog (new JFrame(),message,"Сообщение",JOptionPane.INFORMATION_MESSAGE,Normal);
break;
case -1: message = "О т с у т с т в у е т '$' ! ! !";
JOptionPane.showMessageDialog (new JFrame(),message,"Произошла ошибка",JOptionPane.WARNING_MESSAGE,Error);
break;
case -2: message = "Н е в е р н ы й в х о д н о й с и м в о л ! ! !";
JOptionPane.showMessageDialog (new JFrame(),message,"Произошлаошибка",JOptionPane.WARNING_MESSAGE,Error);
break;
case -3: message = "Не в е р н а я л е к с е м а ! ! !";
JOptionPane.showMessageDialog (new JFrame(),message,"Произошлаошибка",JOptionPane.WARNING_MESSAGE,Error);
break;
case -4: message = "Неверныйтерм ! ! !";
JOptionPane.showMessageDialog (new JFrame(),message,"Произошлаошибка",JOptionPane.WARNING_MESSAGE,Error);
break;
}
}
public void actionPerformed (ActionEvent e)
{
String command = e.getActionCommand();
if (command.equals ("Open"))
{
FileDialog fdlg = new FileDialog(new JFrame(),"Загрузитьфайл",FileDialog.LOAD); // Загрузкафайла.
fdlg.setFile ("*.txt"); // Фильтрация.
fdlg.setDirectory ("input");
fdlg.setVisible(true);
if (fdlg.getFile() != null)
{
BufferedReader in = null;
try
{
in = new BufferedReader (new FileReader (fdlg.getDirectory()+fdlg.getFile()));
String Line = new String ("");
jta1.setText(""); // Очиститьполе.
while ((Line = in.readLine()) != null)
{
jta1.setText (jta1.getText() + Line + "\n");
}
}
catch (Exception ex)
{
System.out.println ("Произошлоисключение: " + ex);
}
}
}
else
if (command.equals ("Exit"))
{
System.exit(0);
}
else
if (command.equals ("About"))
{
String Message = "Кафедра кибирнетики и вычислительной техники"+"\n"+
"Выполнил студент гр. М-32д - Копылов А.И."+"\n"+
"Проверил доцент - Фисун Сергей Николаевич";
ImageIcon icon = new ImageIcon ("icons\\SNTU.gif");
JOptionPane.showMessageDialog (new JFrame(),Message,"About",JOptionPane.INFORMATION_MESSAGE,icon);
}
if (command.equals ("S T A R T"))
{
Lexical_Analyzer.Result.clear();
Lexical_Analyzer.Table.clear();
Lexical_Analyzer.Reader();
if (jrb2.isSelected())
{
JFrame Table = new JFrame ("Управляющая таблица");
Table.setLayout(new FlowLayout(FlowLayout.LEFT,5,10));
Table.setSize(1200,550);
Table.setResizable(false);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Table.setLocation((screenSize.width - Table.getWidth()) / 2,(screenSize.height - Table.getHeight())); // Расположение окна.
jt2 = createTable (1); // Создаём таблицу.
jsp2 = new JScrollPane (jt2);
jt2.setPreferredScrollableViewportSize(new Dimension(1160,430));
Table.add (jsp2);
imNext = new ImageIcon ("icons\\next.png");
jb3 = new JButton ("NEXT SYMBOL",imNext);
jb3.addActionListener (this);
Table.add (jb3);
jtf1 = new JTextField (130);
jtf1.setText (jta1.getText());
Table.add (jtf1);
Table.setVisible(true);
}
else
{
char charMassive [] = jta1.getText().toCharArray();
String Line = "";
for (int i=0;i<charMassive.length;i++)
{
if(charMassive[i] != '\n') Line = Line + charMassive[i];
else Line = Line + " ";
}
while (true)
{
LA_returnStructure m = Lexical_Analyzer.Analyser (Line);
AbstractTableModel atm = (AbstractTableModel) jt1.getModel();
if (m.error != -1) atm.fireTableDataChanged(); // Обновление содержание таблицы.
if (m.end == 1)
{
break;
}
if (m.error < 0) Error (m.error);
}
String Temp [], SyntaxAnalyzer = "";
for (int i=0;i< Lexical_Analyzer.Result.size();i++)
{
Temp = Lexical_Analyzer.Result.get(i).split(",");
SyntaxAnalyzer += Temp[1];
}
jtf2.setText(SyntaxAnalyzer);
jtf3.setText(SyntaxAnalyzer);
}
Lexical_Analyzer.count = 0;
Lexical_Analyzer.row = 0;
Lexical_Analyzer.start = 0;
}
if (command.equals ("NEXT SYMBOL"))
{
char charMassive [] = jta1.getText().toCharArray();
String Line = "";
for (int i=0;i<charMassive.length;i++)
{
if(charMassive[i] != '\n') Line = Line + charMassive[i];
else Line = Line + " ";
}
final LA_returnStructure m = Lexical_Analyzer.Analyser (Line);
if (m.error < 0) Error (m.error);
DefaultTableCellRenderer pink = new DefaultTableCellRenderer()
{
public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component Value = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
if (row == m.indx) Value.setBackground(Color.PINK);
else
Value.setBackground(Color.WHITE);
return Value;
}
};
DefaultTableCellRenderer white = new DefaultTableCellRenderer()
{
public Component getTableCellRendererComponent (JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component Value = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Value.setBackground(Color.WHITE);
return Value;
}
};
if (count % 2 == 0)
{
jt2.getColumnModel().getColumn(save).setCellRenderer(white);
white.setHorizontalAlignment (JLabel.CENTER);
count++;
}
if (m.end != 1)
{
jt2.getColumnModel().getColumn(m.indy).setCellRenderer(pink);
pink.setHorizontalAlignment (JLabel.CENTER);
}
else
{
AbstractTableModel atm = (AbstractTableModel) jt1.getModel();
atm.fireTableDataChanged();
String Temp [], SyntaxAnalyzer = "";
for (int i=0;i< Lexical_Analyzer.Result.size();i++)
{
Temp = Lexical_Analyzer.Result.get(i).split(",");
SyntaxAnalyzer += Temp[1];
}
jtf2.setText(SyntaxAnalyzer);
jtf3.setText(SyntaxAnalyzer);
jb3.setEnabled(false);
}
if (m.indx == 0)
{
AbstractTableModel atm = (AbstractTableModel) jt1.getModel();
atm.fireTableDataChanged();
}
jt2.repaint(); // Прорисовка!
save = m.indy;
count++; // Увеличить счётчик.
}
if (command.equals ("R U N"))
{
Syntax_Analyzer.Reader();
String S = jtf2.getText();
n = Syntax_Analyzer.Analyzer (S);
if (n.end == 1)
{
Error (0);
String message = "Программа уже полностью выполнена." +"\n"+ "Хотите начать выполнение сначала ?";
int response = JOptionPane.showConfirmDialog (new JFrame(),message,"Предупреждение",JOptionPane.YES_NO_OPTION);
switch (response)
{
case JOptionPane.YES_OPTION:Syntax_Analyzer.once = false;
Syntax_Analyzer.ocount = 0;
Syntax_Analyzer.wcount = 2;
Syntax_Analyzer.index = 0;
Syntax_Analyzer.Table.clear();
Syntax_Analyzer.Stack_o.clear();
Syntax_Analyzer.Stack_w.clear(); // Перезапустить программу.
break;
case JOptionPane.NO_OPTION:jb2.setEnabled(false); break;
case JOptionPane.CLOSED_OPTION:break;
}
}
else
if (n.error == 0)
{
String tab = new String ("");
Vector Temp = new Vector ();
for(int i=n.wStack.size()-1;i!=-1;i--)
tab = tab + "[" + Symbol(n.wStack.get(i).get(0)) + "," + n.wStack.get(i).get(1).toString() + "]" + " ";
Temp.add(tab); Temp.add(n.smb);
Temp.add ("M(" + Symbol(n.wStack.get(n.wStack.size()-1).get(0)) + "," + n.smb + ")="
+ Syntax_Analyzer.Table.get(n.wStack.get(n.wStack.size()-1).get(0)).get(Syntax_Analyzer.Comparison(n.smb)));
Stack.add(Temp);
AbstractTableModel atm = (AbstractTableModel) jt3.getModel();
atm.fireTableDataChanged(); // Обновление содержание таблицы.
tab = "";
for (int j=0;j<Syntax_Analyzer.Stack_o.size()-1;j++)
tab = tab + " " + Symbol(Syntax_Analyzer.Stack_o.get(j).get(0)) + "\t" + Syntax_Analyzer.Stack_o.get(j).get(1) + "\n";
jta2.setText("");
jta2.setText(tab);
}
else Error (n.error);
}
if (command.equals ("ВЫПОЛНИТЬ"))
{
jtf4.setText(Polish_Notation.pol(jtf3.getText()));
}
if (command.equals ("ОПТИМИЗИРОЗОВАТЬ"))
{
Optimization.Optimizer (Triads.Triads);
AbstractTableModel atm = (AbstractTableModel) jt5.getModel();
atm.fireTableDataChanged(); // Обновление содержание таблицы.
}
if (command.equals ("ПРЕОБРАЗОВАТЬ"))
{
Triads.getTriads(jtf4.getText());
AbstractTableModel atm = (AbstractTableModel) jt4.getModel();
atm.fireTableDataChanged(); // Обновление содержание таблицы.
}
}
public String Symbol(int i)
{
if(i < Syntax_Analyzer.nTerms.length) return "<" + Character.toString(Syntax_Analyzer.nTerms[i]) + ">";
else return " " + Character.toString(Syntax_Analyzer.Terms[i-Syntax_Analyzer.nTerms.length]) + " ";
}
public static void main(String [] args)
{
SwingUtilities.invokeLater (new Runnable ()
{
public void run ()
{
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel"); // Декорация!
// UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
// UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
// UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
}
catch (Exception ex) { }
new Frame();
}
});
}
}
Размещено на Allbest.ru
...Подобные документы
Разработка комплекса алгоритмов. Кодирование и компиляция. Тестирование, отладка, испытание и сдача программы. Минимальные системные требования для использования Delphi 7. Написание программы с использованием инструментального языка высокого уровня.
курсовая работа [2,7 M], добавлен 21.02.2011Методы грамматического разбора при разработке учебного транслятора. Проектирование лексического анализатора и магазинного автомата. Программная реализация синтаксического анализатора текстового языка высокого уровня. Разработка модуля интерпретации.
курсовая работа [697,2 K], добавлен 06.01.2013Ознакомление с возможностями языка Си как средой программирования высокого уровня. Циклы программирования параметрического оператора for и функции форматированного ввода. Разработка программы средствами Си: блок-схема, текст и тестирование программы.
контрольная работа [204,4 K], добавлен 26.01.2013Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.
курсовая работа [233,5 K], добавлен 14.12.2012Написание программы, которая выполняет лексический и синтаксический анализ входного языка программирования, порождает таблицу лексем с указанием их типов и значений, а также строит синтаксическое дерево; текст входного языка вводится с клавиатуры.
курсовая работа [761,5 K], добавлен 23.02.2012Проектирование лексического и синтаксического анализаторов учебного языка. Правила преобразования логических выражений в ПОЛИЗ. Формирование триад, оптимизация их списка. Логическая структура программы. Тестирование модулей транслятора-интерпретатора.
курсовая работа [1,3 M], добавлен 28.05.2013Транслятор как программа или техническое средство, выполняющее трансляцию программы. Рассмотрение основных особенностей постройки лексического анализатора. Знакомство с этапами разработки транслятора с ограниченного подмножества языка высокого уровня.
курсовая работа [580,5 K], добавлен 06.08.2013Составление транслятора на языке С для перевода кода программы из языка Pascal в код программы на языке Cи. Распознавание и перевод конструкций: for, type, function, integer. Вешняя спецификация, описание, структура, текст программы; распечатка текстов.
курсовая работа [287,8 K], добавлен 24.06.2011Описание математической модели, таблицы истинности. Разработка программы, реализация защитного программирования. Отладка и тестирование программы, инструкция пользователя. Расчет затрат на разработку и коммерческой эффективности проекта от реализации.
дипломная работа [3,2 M], добавлен 18.06.2012Разработка алгоритма синтеза пленочного резистора по заданным параметрам исходного резистора, программы реализации данного алгоритма на языке С++. Отладка и тестирование программы, составление документации и инструкции пользователя данной программой.
курсовая работа [1,7 M], добавлен 08.06.2009Разработка учебного приложения, играющего роль клавиатурного тренажёра. Установка различных опций. Использование средств Borland C++Builder 6.0. Объектно-ориентированное проектирование и программирование системы. Тестирование и отладка программы.
курсовая работа [730,4 K], добавлен 23.07.2013Создание транслятора, обрабатывающего код программы на языке Паскаль и за счет эквивалентных операторов генерирующего программу на Си. Особенности внешней спецификации и работы лексического анализатора. Структура программы, вывод результатов на экран.
курсовая работа [254,0 K], добавлен 02.07.2011Программа для выбираемой единицы измерения (градусы Фаренгейта или Цельсия) и для задаваемого значения температуры в этой единице измерения. Среда Delphi. Системные требования. Блок схема программы. Интерфейс. Тестирование и сопровождение программы.
курсовая работа [447,6 K], добавлен 04.02.2009Проектирование программы-анализатора, состоящей из двух частей: лексического анализатора, разбивающего исходный текст программы на лексемы и заполняющего таблицу имен; синтаксического анализатора, проверяющего соответствие текста заданной грамматике.
курсовая работа [2,0 M], добавлен 14.06.2010Изучение составляющих этапов разработки программ, процесса их тестирования, отладки и документирования в контексте курса обучения начинающих программистов. Теоретический анализ постановки задачи и модели программы, создания текста, семантической отладки.
курсовая работа [29,2 K], добавлен 28.11.2010Структурное программирование, схема алгоритма. Программа на языке Си для int, float. Подпрограмма ввода и вывода целых чисел на Ассемблере IBM. Тестирование и отладка, инструкция пользователя. Язык программирования Си (для int и float), этапы трансляции.
курсовая работа [1,5 M], добавлен 21.10.2014Структурные подразделения и отделы организации, ее технические программные средства. Разработка приложений обработки данных на ассемблере, языке программирования высокого уровня. Тестирование и оптимизация программных модулей. Разработка документации.
отчет по практике [175,0 K], добавлен 30.09.2022Понятие и цель применения текстовых данных. Принцип кодирования азбуки Морзе. Основные методы языка высокого уровня C#. Алгоритм работы, листинг, тестирование программы для перевода текста в последовательность кодов азбуки Морзе. Руководство пользователя.
курсовая работа [1,4 M], добавлен 15.01.2013Структура Android-приложений. Особенности игрового движка. Алгоритмизация и программирование. Список игровых состояний. Настройка, отладка и тестирование программы. Разработка руководства пользователя. Тестирование инсталляции и отображения элементов.
дипломная работа [4,5 M], добавлен 19.01.2017Реализация линейных списков в языке программирования C++. Основные операции при работе с ними. Разработка интерфейса и алгоритмов. Описание работы программы на псевдокоде. Составление программного кода. Тестирование, отладка и результат работы программы.
курсовая работа [1,1 M], добавлен 07.01.2014