Огляд існуючих методів розробки компіляторів, детальний опис мови. Характеристика та специфіка процесу розробки програми компілятора на рівні блок-схем і тексту програми. Подання тексту компілятора, а також результатів тестування розробленої програми.
При низкой оригинальности работы "Розробка та реалізація компонентів системного програмного забезпечення", Вы можете повысить уникальность этой работы до 80-100%
Цільові мови не менш різноманітні - це можуть бути інші мови програмування, різні машинні мови - від мов мікропроцесорів до суперкомпютерів. Деколи компілятори класифікують як однопрохідні, багато прохідні, виконуючі (load-and-go), відлагоджуючі, оптимізуючи - в залежності від призначення і принципів і технологій їх створення. В 50-х роках про компілятори ходила слава, що це програми, дуже складні в написанні (наприклад, перший компілятор Fortran потребував 18 людино-років роботи).Компілятор - програма, яка зчитує текст програми, що написана на одній мові - вхідній, і транслює (переводить) його в еквівалентний текст на іншій мові - цільовій. Ці атрибути надають відомості про відведену ідентифікатору память, його тип, області видимості (де в програмі він може застосовуватися). Основна задача лексичного аналізу - розбити вихідний текст, що складається з послідовності одиночних символів, на послідовність слів, або лексем, тобто виділити ці слова з безперервної послідовності символів для передачі в синтаксичний аналізатор. В задачу синтаксичного аналізатора входить: знайти та виділити основні синтаксичні конструкції мови в послідовності лексем програми, встановити тип та правильність побудови кожної синтаксичної конструкції і представити синтаксичні конструкції у вигляді, зручному для подальшої генерації тексту результуючої програми. Додатковою перевагою автоматичного створення аналізатора є можливість виявлення синтаксичних неоднозначностей та інших складних для розпізнавання конструкцій мови, які інакше могли б залишитися непоміченими на початкових фазах створення мови і його компілятора.Складено формальний опис мови програмування М13 у формі розширеної нотації Бекуса-Наура, дано опис усіх символів та ключових слів. Розроблено лексичний аналізатор, здатний розпізнавати лексеми, що є описані в формальному описі мови програмування, та додані під час безпосереднього використання компілятора. Складено таблицю переходів для даного автомата згідно правил записаних в нотації у формі Бекуса-Наура. Розроблено генератор коду, який починає свою роботу після того, як лексичним, синтаксичним та семантичним аналізатором не було виявлено помилок у програмі, написаній мовою М13.rec symtab[350]; // таблиця символів rec idtab[60]; // таблиця ідентифікаторів int pos; // вказівник на поточний символ у рядку char str[256]; // поточний рядок int strnum=0; // номер рядка у вхідному файлі char *resword[]={«begin», «end», small», «scanf», «printf», «repeat», «until»,».»,»,»,»:»,»;», «(»,»)»,»-», « », «*»,»/», «=»}; // зарезервовані символи int index=1; // номер запису в таблиці символів int index_id=1; // номер запису в таблиці ідентифікаторів int numval; // числове значення char *lex=»\0»; // поточна лексема int isreserv (char *lex) // чи зарезервована поточна лексема? {symtab[index].lexptr=(char*) malloc (strlen(lex) 1); // виділити память для наступного запису strcpy (symtab[index].lexptr, lex); // скопіювати лексему symtab[index].token=tok; // записати токен symtab[index].line=snum; {idtab [index_id].lexptr=(char*) malloc (strlen(lex) 1); // виділити память для наступного запису strcpy (idtab[index_id].lexptr, lex); // скопіювати лексему idtab [index_id].token=tok; // записати токен idtab [index_id].line=snum; {for (і=index_id; і>0; і-) if (strcmp(lex, idtab[і].lexptr)==0) return і; // якщо така лексема вже записана, то повертаємо її значення if (symtab[ index].token!=62) {-index; return 0;} if (symtab[ index].token!=61) err(5);Тестова програма на мові M13 з лексичною помилкою begin float x@; Тестова програма на мові M13 з синтаксичною помилкою begin float x; Тестова програма на мові M13 з семантичною помилкою begin float y; Тестова програма на мові M13 без помилок begin float x, y;
Вывод
Підчас виконання курсової роботи: 1. Складено формальний опис мови програмування М13 у формі розширеної нотації Бекуса-Наура, дано опис усіх символів та ключових слів.
2. Створено компілятор мови програмування М13, а саме: 2.1.1. Розроблено лексичний аналізатор, здатний розпізнавати лексеми, що є описані в формальному описі мови програмування, та додані під час безпосереднього використання компілятора.
2.1.2. Розроблено синтаксичний аналізатор на основі автомата з магазинною памяттю. Складено таблицю переходів для даного автомата згідно правил записаних в нотації у формі Бекуса-Наура.
2.1.3. Розроблено генератор коду, який починає свою роботу після того, як лексичним, синтаксичним та семантичним аналізатором не було виявлено помилок у програмі, написаній мовою М13. Проміжним кодом генератора є програма на мові Assembler(і8086). Вихідним кодом є машинний код, що міститься у виконуваному файлі
3. Проведене тестування компілятора за допомогою тестових програм за наступними пунктами: 3.1.1. Виявлення лексичних помилок.
3.1.2. Виявлення синтаксичних помилок.
3.1.3. Загальна перевірка роботи компілятора.
Тестування не виявило помилок в роботі компілятора, а всі помилки в тестових програмах мовою М13 були виявлені і дано попередження про їх наявність.
В результаті виконання даної курсової роботи було успішно засвоєно методи розробки та реалізації компонент системного програмного забезпечення.
Список литературы
1. Ахо А., Сети Р., Ульман Дж. Компиляторы: принципы, технологии, инструменты. - М.: Издательский дом «Вильямс», 2003.
2. Джордейн Р. Справочник программиста ПК ІВМ PC, XT/AT. - М.: ФИС, 1992.
3. Абель П. Ассемблер для ІВМ PC, 1991.
4. Прата С. Язык программирования Си, 2003
5. Страуструп Б. Введение в язык C , 2001.
6. Ахо и др. Компиляторы: принципы, технологии и инструменты.: Пер с англ. - М.: Издательський дом «Вильямс». 2003. - 768 с.: ил. Парал. тит. англ.
7. Шильдт Г. С . - Санкт-Петербург: BXV, 2002. - 688 с.
8. Компаниец Р.И., Маньков Е.В., Филатов Н.Е. Системное программирование. Основы построения трансляторов. - СПБ.: КОРОНА принт, 2004. - 256 с.
9. Б. Керниган, Д. Ритчи «Язык программирования Си». - Москва «Финансы и статистика», 1992. - 271 с.
10. Л. Дао. Программирование микропроцессора 8088. Пер.с англ.-М. «Мир», 1988.
11. Ваймгартен Ф. Трансляция языков программирования. - М.: Мир, 1977.
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы