Синтаксичний синтаксичний розбір - питання


10

Нещодавно я натрапив на документ, що описує техніку розбору, згадану в заголовку. На жаль, термінологія, що використовується у зазначеному документі, дещо виходить за моє розуміння, тому я намагався зрозуміти алгоритм побудови більш інтуїтивно. Я вважаю, що мені це вдалося ( ця презентація стала джерелом а-ха-моменту), але перевірка правильності того, хто знайомий з технікою або термінологією, що міститься в ній, буде дуже вдячний.

Я опишу своє прийняття рішення (якщо воно правильне, я вважаю, що це може допомогти іншим людям, які намагаються зрозуміти техніку) і після цього задати додаткові запитання. Щоб уникнути непорозумінь, я буду використовувати такі стандартні позначення: , , , і, як на папері, для позначення правила число . Однак я, мабуть, буду використовувати різні назви для понять, ніж оригінальний папір., У , З , . . . N . . . X , Y , Z N T α , β , γ , . . . { N T } A i ω iа,б,c,...ТА,Б,С,...N...Х,Y,ZNТα,β,γ,...{NТ}Аiωi

Також у всьому описі використовується відношення еквівалентності κ0 .

Будівництво

Всередині автоматичного розбору є два типи елементів: прості елементи LR (0) форми Аiαβ які я називаю елементами зміни та елементами форми Аiαβ,м,н які я називаю роздільними елементами ; вони вказують парсеру відсунути н символів назад вхідного потоку, а потім зменшити на номер правила м на перший символ β .

Граматику доповнено правилом S'0S$ і побудова починається з елемента зсуву S'0S$ у початковому стані.

Тепер, щоб побудувати автомат, вирішіть між цими альтернативами для кожного елемента у стані :q

  1. Якщо елемент є елементом зсуву , в автоматі відбудеться перехід , де - перший символ .q X q X βАiαβqХq'Хβ

  2. Якщо елемент є готовим елементом зсуву , додайте роздільний елемент для кожного правила .B j α A β , i , 0 B j α A βАiωБjαАβ,i,0БjαАβ

  3. Якщо елемент є роздільним елементом , нехай є першим символом . Якщо , додайте елемент зсуву для кожного правила . Якщо інші елементи, крім мають як свою точку пошуку, додайте перехід до автомата. Кожен елемент вирішення 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 β , mАiαβ,м,нХβXNXjωXjωAiαβ,m,nXqXqCiαXβ,m,nqq CiαXβ,m,n+1q .

  4. Якщо елемент - це вирішувальний елемент він не внесе жодної інформації про пошук і може бути відкинутий, але спочатку додайте роздільний елемент для кожного правила .Aiω,m,nBjαAβ,m,nBjαAβ

Це, звичайно, лише ескіз; насправді, слід спочатку розраховувати питання про закриття штату, і лише тоді ми можемо мати справу з переходами / зрушеннями та резолюціями.

Трансформація автомата в таблицю розбору з можливістю зсуву є тривіальною згодом; просто, як незначну варіацію, автори статті трактують резолюцію як дію прийняття. Враховуючи отриманий автомат, я вважаю, що зручніше просто розглядати зсув як дію прийняття.r0,0$

Запитання

Перший - очевидно, чи правильний описаний вище процес.

Другий - про відношення еквівалентності. Я можу лише здогадуватися, що відношення еквівалентності - це те, що відповідає за вирішення того, які елементи розв’язування будуть введені, коли побачений готовий елемент зміни. здається, призводить до того, що вражає подібність до парсерів LSLR. У статті описано "тонше відношення еквівалентності" на сторінці 11; чи є спосіб інтерпретувати це відношення інтуїтивно? Чи відомі інші відносини?κκ0FOLLOWLM

І остання - про вирішення конфлікту. У роботі добре описано, що є невідповідністю автоматики зсуву; чи існує спосіб вирішення цих недоліків, подібний до способів вирішення конфліктів у традиційному аналізаторі LR? Чи може щось подібне до вирішення конфліктів у стилі yacc через пріоритет та асоціативність реалізувати в генераторі парсера ShRe?

Дякую, якщо ти все це прочитаєш і будь-які відповіді будуть дуже вдячні :)


запропонуйте перенести це запитання в категорію. що стосується статті, здається, це дуже складний алгоритм, який "ймовірно" (?) ніхто не реалізував. Основна ідея, як видається, полягає в поєднанні довільної пошуку, але також з лінійним розбором часу ...? але скільки програм було б нормально з більш простим, стандартним, суперлінійним алгоритмом? будь-яка ідея, яка програма буде краще працювати при такому підході? у вас є такий чи ви знаєте одного?
vzn

1
Дуже приємна теоретична вправа (хоча я не дивився на технічні). Враховуючи, що повна потужність LR (k) часто навіть не використовується, можна задатися питанням практичного впливу. Я бачу дві проблеми з таким видом роботи: (1) оскільки алгоритм стає складнішим, чи все-таки людський розум може згорнути граматику і зрозуміти наслідки, коли це не спрацює. Частий факт, що дуже складні методи дуже корисні, коли вони працюють, але погіршують ситуацію, коли цього не роблять. (2) чи буде це лінійним у випадках, коли загальні алгоритми КФ не є лінійними.
babou

Відповіді:


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.