- •4.Основні частини компілятора.
- •5Лексичний аналіз роботи з таблицями
- •6. Синтаксичний та семантичний аналіз, дерева
- •7. Польський запис, тетради.
- •8. Формальне визначення мови, операції над мовами.
- •9. Граматики
- •11.Регулярний вираз
- •12) Нормальна форма Бекуса-Наура
- •13. Ієрархія Хомського
- •14. Регулярні граматики.
- •15. Скінченні автомати
- •16. Детерміновані і недетерміновані кінцеві автомати.
- •18. Побудова детермінованих кінцевих автоматів за недетермінованими кінцевими автоматами.
- •19. Програмування сканера.
- •20. Таблиці символів, хеш-функції, хеш-адресація
- •21. Колізія, ре хешування
- •23.Контекстно-выльны граматики.
- •24. Синтаксично-керований переклад
- •25. Переклад інфіксної форми запису у польську
- •26. Алгоритм синтаксично-керованого перекладу:
- •27. Автомати з магазинною пам’яттю
- •28. Операторні граматики
- •29.Алгоритм розборуоператорних грамматик.
- •37. Оптимізація булевих виразів, циклів.
- •38. Генерація коду. Скп на мову Асамблер.
- •39. Інтерпретатори, адресація, представлення ідентифікаторів.
- •40 Компілятор компіляторів.
- •41 Генератор лексичних аналізаторів.(lex)
- •42. Генератор синтаксичних аналізаторів.
- •43. Приклади застосування генераторыв.
19. Програмування сканера.
Відповідь:
Для побудови сканера будем використовувати скінченний автомат. До автомата пред'являються вимоги:
-він повинен формувати потік лексем
(Лексемами є роздільники або оператори, ключові слова, службові слова, ідентифікатори і константи.);
-повинен заносити розпізнані лексемив таблицю символів або імен.
Розглянемо спрощений розпізнавальний автомат:
D D
( S )->-( int )->-( S )
|
| L L
|->-( id )->-( S )
| ____
| | |
| / * \|/ | * /
|->-( sla )->-( com )->-( R )->-( end )->-( S )
| | /|\ /
| \|/ |_______/
| ( S )
|
| delim
|--->---( S )
|
| інакше
|---->---( err ) // (...) - слово описане кругом
D-цифра
L-буква
delim-розділювач
Стан:
int-розпізнавач числа
id-розпізнавач ідентифікатора
sla, com, R-розпізнавач коментарів
1)При переході в поч. стан іноді потрібно повернути символ вхідної послідовності назад інакше будем втрачати частину зчитаних лексем;
2)Автомат в такому вигляді нічого не вартий бо він не виконує нічого корисного. Його потрібно доповнити процедурною частиною. Процедурна частина відповідає за формування імен, які будуть заноситись в таблицю символів, за повернення зчитаного символу назад в потік, за інсталізацію і т. д.
Доповнення атомата процедурними частинами полягає в тому, що коли автомат здійснить перехід, повинна виникнути зв'язана з цим переходом одна чи декілька підпрограм
20. Таблиці символів, хеш-функції, хеш-адресація
При трансляції програми для кожного нового елемента в таблиці символів додається цей елемент, якщо його немає в таблиці. Найпростіше шукати елемент в пересортованій таблиці, і час пошуку елементів в таблиці рівний n/2. Якщо відсортувати елементи таблиці, то можна виконати алгоритм бінарного пошуку, в якому середнє число порівнянь – 1+log2n
Хеш функція — функція, що перетворює вхідні дані будь-якого (як правило, великого) розміру в дані фіксованого розміру.
Криптографічна хеш-функція повинна забезпечувати:
стійкість до колізій (два різні набори даних повинні мати різні результати перетворення);
необоротність (неможливість обчислити вхідні дані за результатом перетворення).
Хеш-функції також використовуються в деяких структурах даних — хеш таблицях і декартових деревах. Вимоги до хеш-функції в цьому разі інші:
добра перемішуваність даних;
швидкий алгоритм обчислення.
Хеш-адресація
Ідеальний варіант: при розпізнаванні ідентифікатора одразу визначити його адресу в таблиці
Хеш-адресація – це метод перетворення імені індекса ел. таблиці. Якщо таблиця має розмір N , то індексація від 0 до N-1 елементів. Хеш-ф-ію назвемо деяке перетворення імені в адресу
Найпростіший варіант хеш-ф-ії – взяти код першої літери як адресу таблиці. Ситуація, коли хеш-адреса для 2 імен різні коди, то все нормально, але якщо ні, то така ситуація називається- колізією. «Добра хеш-функція» - функція, яка розподіляє адреси імен по табл.. відносно рівномірно і колізії виникають не надто часто.