Нещодавно я натрапив на документ, що описує техніку розбору, згадану в заголовку. На жаль, термінологія, що використовується у зазначеному документі, дещо виходить за моє розуміння, тому я намагався зрозуміти алгоритм побудови більш інтуїтивно. Я вважаю, що мені це вдалося ( ця презентація стала джерелом а-ха-моменту), але перевірка правильності того, хто знайомий з технікою або термінологією, що міститься в ній, буде дуже вдячний.
Я опишу своє прийняття рішення (якщо воно правильне, я вважаю, що це може допомогти іншим людям, які намагаються зрозуміти техніку) і після цього задати додаткові запитання. Щоб уникнути непорозумінь, я буду використовувати такі стандартні позначення: , , , і, як на папері, для позначення правила число . Однак я, мабуть, буду використовувати різні назви для понять, ніж оригінальний папір., У , З , . . . ∈ N . . . X , Y , Z ∈ N ∪ T α , β , γ , . . . ∈ { N ∪ T } ∗ A i → ω i
Також у всьому описі використовується відношення еквівалентності .
Будівництво
Всередині автоматичного розбору є два типи елементів: прості елементи LR (0) форми які я називаю елементами зміни та елементами форми які я називаю роздільними елементами ; вони вказують парсеру відсунути символів назад вхідного потоку, а потім зменшити на номер правила на перший символ .
Граматику доповнено правилом і побудова починається з елемента зсуву у початковому стані.
Тепер, щоб побудувати автомат, вирішіть між цими альтернативами для кожного елемента у стані :
Якщо елемент є елементом зсуву , в автоматі відбудеться перехід , де - перший символ .q X → q ′ X β
Якщо елемент є готовим елементом зсуву , додайте роздільний елемент для кожного правила .B j → α A ∙ β , i , 0 B j → α A β
Якщо елемент є роздільним елементом , нехай є першим символом . Якщо , додайте елемент зсуву для кожного правила . Якщо інші елементи, крім мають як свою точку пошуку, додайте перехід до автомата. Кожен елемент вирішення in призведе до вирішення елемента inX β X ∈ N X j → ∙ ω X j → ω A i → α ∙ β , m , n X q X → q ′ C i → α ∙ X β , m , n q C i → α X ∙ β , mq ′ .
Якщо елемент - це вирішувальний елемент він не внесе жодної інформації про пошук і може бути відкинутий, але спочатку додайте роздільний елемент для кожного правила .
Це, звичайно, лише ескіз; насправді, слід спочатку розраховувати питання про закриття штату, і лише тоді ми можемо мати справу з переходами / зрушеннями та резолюціями.
Трансформація автомата в таблицю розбору з можливістю зсуву є тривіальною згодом; просто, як незначну варіацію, автори статті трактують резолюцію як дію прийняття. Враховуючи отриманий автомат, я вважаю, що зручніше просто розглядати зсув як дію прийняття.
Запитання
Перший - очевидно, чи правильний описаний вище процес.
Другий - про відношення еквівалентності. Я можу лише здогадуватися, що відношення еквівалентності - це те, що відповідає за вирішення того, які елементи розв’язування будуть введені, коли побачений готовий елемент зміни. здається, призводить до того, що вражає подібність до парсерів LSLR. У статті описано "тонше відношення еквівалентності" на сторінці 11; чи є спосіб інтерпретувати це відношення інтуїтивно? Чи відомі інші відносини?
І остання - про вирішення конфлікту. У роботі добре описано, що є невідповідністю автоматики зсуву; чи існує спосіб вирішення цих недоліків, подібний до способів вирішення конфліктів у традиційному аналізаторі LR? Чи може щось подібне до вирішення конфліктів у стилі yacc через пріоритет та асоціативність реалізувати в генераторі парсера ShRe?
Дякую, якщо ти все це прочитаєш і будь-які відповіді будуть дуже вдячні :)