- •Описати омновні принципи класифікації мов програмуванняю
- •Що таке мова програмування. Описати універсальні й спеціалізовані мови.
- •Формальні мови. Основні поняття і визначення.
- •Формальне визначення граматики g(V). Що таке продукція? Опишіть поняття термінального і не термінального символу.
- •Формальне визначення мови l(g). Види мов.
- •6. Що таке граматика ? Дайте визначення і наведіть приклади.
- •8. Класифікація граматик і мов за Хомським. Співвідношення між типами граматик.
- •9. Які калси граматик існують ? Які граматики відносяться до класу регулярних граматик ?
- •10.Що таке ланцюжки виводу та сентенціальна форма ? Опишіть проблеми однозначності і еквівалентності граматик.
- •11 (8). Опишіть способи представлення граматики мов. Що таке синтаксичні діаграми ?
- •12. Дерево синтаксичного розбору. Перехід від дерева до правил формальної граматики.
- •13. Як виглядає опис граматики у формі Бєкуса-Наура.
- •14. Дайте визначення ланцюжка, мови. Що таке синтаксис і семантика мови ?
- •15 (11). Опишіть способи представлення граматики мов. Що таке синтаксичні діаграми
- •16. Перетворення граматик.
- •17. Що таке розпізнавач. У чому полягає задачі розбору ?
- •18. Формальне визначення автомата.
- •19. Що таке скінченний автомат? Дайте визначення детермінованого й не детермінованого скінчених автоматів.
- •20. Скінченний автомат. Описати характеристики скінченного автомата.
- •21. Описати зв’язок граматики із скінченним автоматом.
- •22. Визначте структуру скінченного автомата і функції його елементів .
- •23. Опишіть способи завдання функцій переходів са.
- •24. Опишіть алгоритм побудови дса по нса
- •25. Регулярні граматики. Способи завдання регулярних мов.
- •26. Скінченні автомати. Регулярні граматики. Регулярні множини.
- •27. Побудова са на основі ліволінійної граматики, видимості ланцюжка.
- •28 (25). Властивості регулярних мов
- •29. Описати основні поняття автомата з магазинною пам’ятю, його структуру і характеристики.
- •30. Дайте визначення контекстно-вільної граматики, виводимості ланцюжка, безпосередньої виводимості, довжини виводу.
- •31 (30). Описати основні компоненти контекстно-вільних граматик.
- •32. Перетворення контекстно вільних граматик.
- •33. Приведення контекстно-вільних граматик.
- •34. Опишіть принципи побудови лексичних аналізаторів.
- •43. Опишіть переваги і недоліки таблиць ідентифікаторів за допомогою хеш-функцій. Що таке колізія? Чому вона відбувається?
- •44. Опишіть найпростіші методи побудови таблиць ідентифікаторів.
- •49. Опишіть клас граматики, який використовується на етапі створення синтаксичного аналізатора.
- •50. Опишіть lr(k)-граматики.
- •51. Опишіть ll(k)-граматики.
- •52. Транслятори, компілятори та інтерпретатори – описати загальну схему роботи.
- •53. З яких процесів складається компіляція? Опишіть загальну структуру компілятора.
- •54. Що таке трансляція, компіляція, транслятор, компілятор ?
- •55. Опишіть загальну схему роботи компілятора.
- •57. Семантичний аналіз та підготовка до генерації коду.
- •58. Що таке генерація коду? Опишіть методи генерації коду.
- •59. Способи внутрішнього представлення програми.
- •60. Що таке оптимізація коду. Опишіть загальні методи оптимізації.
27. Побудова са на основі ліволінійної граматики, видимості ланцюжка.
-
28 (25). Властивості регулярних мов
29. Описати основні поняття автомата з магазинною пам’ятю, його структуру і характеристики.
Автомат з магазинною пам’ятю – це автомат, який на відміну від звичайного кінцевого автомату має стек (магазин), в який можна поміщати спеціальні “магазинні” символи. Перехід від одного стана в інший залежить не тільки від вхідного символу, але й від одного або багатьох верхніх символів стека. Таким чином, конфігурація автомата визначається трьома параметрами: станом автомата, поточним символом вхідної ціпки і складом стека. МП-автомат називається детермінованим, якщо із одної і тої ж його конфігурації можливе не більше одного переходу в наступну конфігурацію.
30. Дайте визначення контекстно-вільної граматики, виводимості ланцюжка, безпосередньої виводимості, довжини виводу.
Контекстно-вільна
граматика
це
четвірка
:
та
скінченні
множини, що не перетинаються
скінченна
підмножина
При цьому,
використовують такі назви:
—
множина нетермінальних символів,
—
множина термінальних символів,
—
множина правил виводу
початковий
символ. Правила
записують
як
.
В лівій частині правила виводу має знаходитись одна змінна (нетермінальний символ).
Виводимість ланцюжка – це властивість ланцюжка при якій всі його символи замінюються та перетворюються.
31 (30). Описати основні компоненти контекстно-вільних граматик.
32. Перетворення контекстно вільних граматик.
Перший вид перетворення пов'язаний з видаленням iз граматики зайвих символiв. Зайвi символи в граматицi можуть виявитися в таких випадках: а) якщо символ не може бути отриманий при виведеннi; б) якщо iз символу не може бути отриманий кiнцевий термiнальний ланцюжок.
Визначення
непродуктивних символiв
- символ x
Va називається непродуктивним,
якщо з нього не може бути виведений
кiнцевий термiнальний ланцюжок.
Визначення
недосяжних символiв
- Символ х
Vт
Va називається недосяжним у
КВ-граматицi Г, якщо х не з'являється в
жодному виведеному ланцюжку.
Виключення
лiворекурсивних правил
- Ряд
граматик потребують виключення
лiворекурсивних та ланцюгових правил.
Правило
вигляду A
A,
де A
Va,
та
(Vт
Va),
називається праворекурсивним,
а правило вигляду A
A
лiворекурсивним.
Виключення ланцюгових правил - правило граматики вигляду A B, де A, B Va, називається ланцюговим. Для КВ-граматики Г, яка мiстить ланцюговi правила, можна побудувати еквiвалентну їй граматику Г', яка не мiстить ланцюгових правил.
33. Приведення контекстно-вільних граматик.
З чотирьох типiв граматик контекстно-вiльнi граматики (КВ) є найбiльш важливими з погляду додаткiв до мов програмування i компiляцiї. За допомогою КВ-граматики можна визначити велику частину структури мови програмування. При побудовi граматик, що задають конструкцiї мов програмування, часто доводиться вдаватися до їх перетворення, щоб породжувана мова набула потрiбної структури.
34. Опишіть принципи побудови лексичних аналізаторів.
Лексичний аналізатор (сканер) – це частина компілятора, яка читає літери програми і будує з них лексеми вихідної мови. Лексичний аналіз не є обов’язковим, його роль виконує синтаксичний аналіз. Синтаксичний аналіз перевіряє правильність тексту вхідної мови з точки зору семантики мови. Синтаксичний розбір – це основна частина компілятора на етапі аналізу. Синтаксичний розбір виділяє синтаксичні конструкції в тексті вхідної програми, яка оброблена лексичним аналізатором.
35 (34) . Опишіть лексичний аналізатор і результати його роботи.
36. Опишіть класи граматик, які використовуються на етапі лексичного аналізу.
-
37. Дати визначення та описати організацію таблиць ідентифікаторів.
Таблиця ідентифікаторів - (таблиця символів), це спеціальним чином організовані набором даних, які використовуються для збереження інформації про елементи вхідної програми, а потім вони використовуються для генерації коду. Будь-яка таблиця ідентифікаторів складається з набору полів, кількість яких дорівнює числу різних ідентифікаторів знайдених у вхідних програмах.
38 (34). Надати характеристику лексичному аналізатору.
39 (34). Що таке сканери? Описати принципи побудови сканерів.
40 (37). Опишіть призначення й особливості побудови таблиць ідентифікаторів.
41. У чому полягає алгоритм організації таблиці ідентифікаторів за допомогою невпорядкованого масиву.
-
42. У чому полягає алгоритм логарифмічного пошуку? Які переваги він дає в порівнянні із простим перебором і які він має недоліки?
Часто зустрічається задача пошуку в масиві, яка неформально формулюється таким чином: в заданій послідовності чисел знайти елемент з певним значенням. В загальному випадку застосовується алгоритм послідовного пошуку, який полягає в послідовному перегляді всіх елементів і порівнянні їх з потрібним значенням. Легко бачити, що цей алгоритм має лінійну часову складність. Але, якщо заздалегідь відомо, що послідовність упорядкована за зростанням або за спаданням, можна застосувати інший алгоритм - алгоритм половинного ділення. Послідовність ділиться на дві рівні частини. Оскільки послідовність упорядкована, можна визначити, в якій частині знаходиться потрібний елемент. Після цього процедура повторюється: потрібна частина знову ділиться навпіл і т.п. Цей алгоритм є логарифмічним.
