- •Описати омновні принципи класифікації мов програмуванняю
- •Що таке мова програмування. Описати універсальні й спеціалізовані мови.
- •Формальні мови. Основні поняття і визначення.
- •Формальне визначення граматики 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. Що таке оптимізація коду. Опишіть загальні методи оптимізації.
49. Опишіть клас граматики, який використовується на етапі створення синтаксичного аналізатора.
- LL(k)-граматики (51)
50. Опишіть lr(k)-граматики.
Детерміновані висхідні розпізнавачі, так само як і спадні , можуть бути побудовані не для всякої КС- граматики , а тільки для певних підкласів таких граматик . Найбільш широким підкласом КС- граматик є LR ( k ) - граматики. Ці граматики забезпечують розпізнавання ланцюжка при перегляді зліва направо , про це говорить буква L ( Left ) у назві граматики , і дозволяють виконати правосторонній згортання , це показує буква R ( Right ) у назві . Параметр k говорить про те , що для визначення того правила граматики , яке потрібно застосувати для згортання ланцюжка , буде потрібно переглянути не більше k ще не прочитав символів вхідного ланцюжка . У загальному випадку алгоритми побудови розпізнавачів дл LR ( k ) - граматик виявляються досить складними і трудомісткими , тому на практиці найчастіше використовують підкласи LR ( k ) - граматик : LR ( 0 ) , або SLR ( 1 ) - прості ( Simple) LR ( 1 ) - граматики , що дозволяють відносно просто виконувати побудову висхідних розпізнавачів . При цьому для кожного підкласу LR ( k ) - граматик використовується свій алгоритм побудови . Якщо задана КС- граматика , то визначити її приналежність до одного з підкласів граматик LR ( k ) можна тільки шляхом аналізу можливості побудови для неї за допомогою певного алгоритму детермінованого розпізнавача . Враховуючи останню обставину , домовимося називати распознаватели по підкласу відповідних граматик : LR ( 0 ) - розпізнавач або SLR ( 1 ) – розпізнавач.
51. Опишіть ll(k)-граматики.
Існує клас граматик, заснований саме на цьому принципі - виборі однієї альтернативи з безлічі можливих на основі декількох чергових символів в ланцюжку. Це так звані LL (k)-граматики. Граматика називається LL ( k ) - граматикою , якщо вона має властивість LL ( k ) для деякого k > 0. Назва « LL ( k ) » несе певний сенс. Перша літера «L» походить від слова « left » і означає , що вхідні ланцюжок символів читається в напрямку зліва направо . Друга літера «L» також походить від слова « left » і означає , що при роботі розпізнавача використовується лівобічний висновок . Замість « k » у назві класу граматики варто деяке число , яке показує , скільки символів треба розглянути, щоб однозначно вибрати одну з безлічі альтернатив .
52. Транслятори, компілятори та інтерпретатори – описати загальну схему роботи.
Транслятор це програма, що переводить вхідну програму на вихідній (вхідній) мові в еквівалентну їй вихідну програму на результуючій (вихідній) мові. Компілятор це транслятор, що здійснює переклад вихідної програми в еквівалентну їй обєктну програму мовою машинних команд або мовою ассемблера. Таким чином, компілятор відрізняється від транслятора лише тим, що його результуюча програма завжди повинна бути написана мовою машинних кодів чи мовою ассемблера. Результуюча програма транслятора, у загальному випадку, може бути написана на будь-якій мові. Відповідно, усякий компілятор є транслятором, але не навпаки не всякий транслятор буде компілятором. Необхідність компіляторів зявилася одночасно з появою мов програмування високого рівня. Інтерпретатор це програма, що сприймає вхідну програму вихідною мовою і виконує її. Інтерпретатор, так само як і транслятор, аналізує текст вихідної програми. Однак він не породжує результуючої програми, а відразу ж виконує вихідну відповідно до її змісту, заданим семантикою вхідної мови.
