Міністерство освіти РФ
Тульський державний університет
Кафедра АТМ
Курсова робота
за курсом
В«Теорія обчислювальних процесівВ»
Тула - 2003
Зміст:
1.Постановка завдання ................................................................ 4
1.1. Завдання ............................................................................ 4
2.1. Глобальні змінні і необхідні підпрограми .............. 4
3.1. Діаграма станів .......................................................... 5
2.Текст програми .................................................................. 7
3. Інструкція користувачеві ..................................................... 14
4. Тестовий приклад ................................................................ 14
Список використаних джерел .......................................... 15
Вступ:
На сьогоднішній момент існує величезна кількість розмаїтості-них мов програмування. Всі вони мають свою історію, свою область застосування, та перераховувати навіть найбільш відомі з них не має сенсу. Але всі ці мови побудовані на основі одних і тих же принципів, основи яких визначає теорія формальних мов і граматик.
1. Постановка завдання:
В
1.1. Завдання:
У даній контрольно-курсовій роботі необхідно виконати лексичний аналіз тексту програми на певному умовному мовою програмування. Таким чином потрібно розробити сканер, який зчитує літери первісної, вихідної програми і будує слова, чи інакше символи, вихідної програми (ідентифікатори, службові слова, одно-або двулітерние роздільники).
Символами в мові, для якого необхідно розробити сканер є:
1.Служебние слова: Цикл ...;
Поки ... Робити;
Продовжити;
Речовий;
Подвійний.
2.Оператори: +, -, *, /, (,), =, <>, <,>.
3.Ідентіфікатори: (рус.буква | _), (рус.буква | _ | цифра) *.
4.Логіческіе операції: І, АБО, НЕ.
5.Комментарій: {* ... *}, {{-до кінця рядка.
1.2. Глобальні змінні і необхідні підпрограми:
Для роботи сканера потрібні такі змінні і підпрограми:
1. char c, де c - глобальна змінна, значенням якої завжди буде сканована літера вихідної програми.
2. int Class, де Class містить ціле число, яке характеризує клас літери, що знаходиться в с. Будемо вважати, що якщо Class = 1 то це цифра, Class = 2 - буква, Class = 3 - літера '{', Class = 4 - оператор, Class = 5 - неприпустиме вираз.
3. char s [20] - масив який буде містити ланцюжок літер, складових символ.
4. void Getchar (char, int &) - функція, завдання якої полягає в тому, щоб вибрати наступну літеру вихідної програми і помістити її в с, а клас літера в Class. p> 5. int LookUp (char * ) - Функція яка здійснює пошук символу, набраного в s, за таблицею службових слів і логічних операцій. Якщо символ є службовим словом, то LookUp поверне 1, якщо символ це логічна операція то LookUp поверне 2, в іншому випадку функція поверне 3. br/>
1.3. Діаграма станів:
Мітка D використовується замість кожної з міток 0, 1, 2, ..., 9, тобто D представляє клас цифр. Це робиться для спрощення діаграми. Аналогічно мітка L представляє клас літери А, Б, ..., Я, а, б, ..., я, а DELIM представляє клас роздільників (операторів). Літера {обробляється особливим чином. p> Деякі дуги помічені. Ці дуги будуть обрані, якщо сканована літера не співпадає ні з однією з літер, якими позначені інші дуги.
Додамо семантику в діаграму станів. Введемо команду Gc, скорочено позначивши таки чином функцію void Getchar (char, int &). Під першою дугою, провідною до стану S, записана команда init, яка вказує на необхідність виконання підготовчих дій і початкових установок, а саме перевірка вмісту з, і якщо там пробіл, то повторно викликається void Getchar (char, int &) до тих пір, поки в з не виявиться літера, відмінна від пропуску якщо команда init визначить кінець файлу то програма буде завершена. Команда ADD означає, що літера з додається до рядка s. У стані Print int друкується певне програмою ціле число, в Print sl - Службове слово, в Print log - логічна операція, в Print id - ідентифікатор, в Print com - коментар, в Print еrror - Неприпустиме вираз. З будь-якого стану Print дуги ведуть в стан S до тих пір, поки init не з'ясує кінець файлу.
...