Це частина серії запитань, яка присвячена сестринському проекту до проекту абстракції, який має на меті абстрагувати поняття, які використовуються в мовному дизайні у формі рамки. Сестринський проект називається OILexer, який має на меті побудувати аналізатор з граматичних файлів, без використання введення коду на сірники.
Деякі інші сторінки, пов’язані з цими питаннями, пов’язаними зі структурним набором тексту, можна переглянути тут та прості у використанні, які можна знайти тут . Метатему, пов’язану із запитом про рамки та правильне місце для публікації, можна знайти тут .
Я доходжу до того, що я збираюся розпочати видобуток дерева розбору з заданої граматики, а потім рекурсивний аналізатор спуску, який використовує DFA для виявлення прямих шляхів (подібно до LL ANTLR 4 (*)), тому я подумав, що я відкрию це для отримання розуміння.
Які компілятори для аналізатора розглядають, які функції є ідеальними?
Поки тут короткий огляд того, що реалізовано:
- Шаблони
- Погляньте наперед передбачення, знаючи, що діє в даній точці.
- Правило "Делітералізація", що приймає буквари в правила і вирішує, з якого маркера вони походять.
- Недетерміновані автомати
- Детерміновані автомати
- Проста машина лексичного стану для розпізнавання лексем
- Методи автоматизації токенів:
- Сканування - корисно для коментарів: Коментар: = "/ *" Сканування ("* /");
- Віднімання - корисно для ідентифікаторів: Ідентифікатор: = Віднімання (IdentifierBody, Ключові слова);
- Переконайтесь, що ідентифікатор не приймає ключові слова.
- Кодування - Кодує автоматизацію як кількість X переходів базових N.
- UnicodeEscape: = "\\ u" BaseEncode (IdentifierCharNoEscape, 16, 4);
- Робить унікод втечі в шістнадцятковому розмірі, з шістнадцятковим 4-переходом. Різниця між цим та: [0-9A-Fa-f] {4} є результатом автоматизації з кодуванням обмежує дозволений набір шістнадцяткових значень на область IdentifierCharNoEscape. Отже, якщо ви надаєте \ u005c, версія кодування не прийме значення. Такі речі мають серйозний застереження: використовуйте економно. Отримана автоматизація може бути досить складною.
- UnicodeEscape: = "\\ u" BaseEncode (IdentifierCharNoEscape, 16, 4);
Те, що не реалізовано, це генерація CST, мені потрібно налаштувати детерміновані автоматики, щоб переносити належний контекст, щоб це працювало.
Для всіх, хто цікавиться, я завантажив симпатичну надруковану оригінальну форму проекту T * y♯ . Кожен файл повинен посилатися на кожен інший файл, я почав посилатись на окремі правила, щоб дотримуватися їх, але це зайняло б занадто багато часу (було б простіше автоматизувати!)
Якщо потрібен додатковий контекст, будь ласка, опублікуйте його відповідно.
Редагувати 5-14-2013 : Я написав код для створення графіків GraphViz для державних машин у межах заданої мови. Ось графік GraphViz Парламенту AssemblyPart . Члени, пов'язані в описі мови, повинні мати ім'я правила.txt у своїй відносній папці з диграфом для цього правила. Частина опису мови змінилася з моменту розміщення прикладу, це пов’язано зі спрощенням речей про граматику. Ось цікавий графічний образ .