Разбор Shift-разрешения - вопросы

10

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

Я опишу свое решение (если оно верное, я думаю, что оно может помочь другим людям, пытающимся понять технику), а затем задам дополнительные вопросы. Чтобы избежать недопонимания, я собираюсь использовать следующие стандартные обозначения: , , , и, как в статье, для обозначения правила номер . Тем не менее, я, вероятно, буду использовать другие имена для концепций, чем оригинальная статья.a,b,c,...TA,B,C,...N...X,Y,ZNTα,β,γ,...{NT}Aiωi

Также в описании используется отношение эквивалентности .κ0

строительство

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

Грамматика дополняется правилом а построение начинается с элемента сдвига в исходном состоянии.S0S$S0S$

Теперь, чтобы построить автомат, определитесь между этими альтернативами для каждого элемента в состоянии :q

  1. Если элемент является сдвиговым элементом , в автомате произойдет переход , где - первый символ .AiαβqXqXβ

  2. Если элемент является законченным элементом сдвига , добавьте элемент разрешения для каждого правила .AiωBjαAβ,i,0BjαAβ

  3. Если элемент является разрешающим элементом , пусть будет первым символом . Если , добавьте элемент смены для каждого правила . Если другие элементы, кроме имеют качестве точки обзора, добавьте переход к автомату. Каждый элемент разрешения в приведет к элементу разрешения вAiαβ,m,nXβXNXjωXjωAiαβ,m,nXqXqCiαXβ,m,nqCiα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) будет ли он линейным в случаях, когда общие алгоритмы CF не являются линейными.
Бабу

Ответы: