Jump to content

Грамматика приоритета операторов

Грамматика приоритета операторов — это разновидность грамматики формальных языков .

Технически грамматика приоритета операторов — это контекстно-свободная грамматика , обладающая свойством (среди прочего) [1] что ни одна продукция не имеет ни пустой правой части, ни двух соседних нетерминалов в своей правая сторона. Эти свойства позволяют отношения устанавливать старшинства. определяется между терминалами грамматики. Анализатор , использующий эти отношения, значительно проще, чем анализаторы более общего назначения, такие как анализаторы LALR . Анализаторы приоритета операторов могут быть созданы для большого класса контекстно-свободных грамматик.

Отношения старшинства

[ редактировать ]

Грамматики приоритета операторов основаны на следующих трех отношениях приоритета между терминалами: [2]

Связь Значение
a уступает приоритет b
a имеет тот же приоритет, что и b
a имеет приоритет над b

Эти отношения приоритета операторов позволяют разграничивать дескрипторы в правильных формах предложений : отмечает левый конец, появляется внутри ручки, и отмечает правый конец. В отличие от других анализаторов сдвига-сокращения, все нетерминалы считаются равными с целью идентификации дескрипторов. [3] Отношения не обладают теми же свойствами, что и их аналоги без точек; е. г. вообще не подразумевает , и не следует от . Более того, вообще не соблюдается, и возможно.

Предположим, что между терминалами a i и a i +1 всегда существует ровно одно отношение предшествования. Предположим, что $ — это конец строки. Тогда для всех терминалов b определяем: и . Если мы удалим все нетерминалы и разместим правильное отношение приоритета: , , между остальными терминалами остаются строки, которые можно проанализировать легко разрабатываемым восходящим парсером .

Например, можно использовать следующие отношения приоритета операторов. быть введено для простых выражений: [4]

Они следуют из следующих фактов: [5]

  • + имеет более низкий приоритет, чем * (следовательно, и ).
  • И +, и * левоассоциативны (следовательно, и ).

Входная строка [4]

после добавления конечных маркеров и вставки отношений приоритета становится

Анализ приоритета операторов

[ редактировать ]

Наличие отношений приоритета позволяет идентифицировать дескрипторы следующим образом: [4]

  • сканируйте строку слева, пока не увидите
  • сканирование назад (справа налево) по любому пока не увижу
  • все между двумя отношениями и , включая любые промежуточные или окружающие нетерминалы, образует дескриптор

Обычно нет необходимости просматривать всю форму предложения, чтобы найти дескриптор.

Алгоритм анализа приоритета операторов

[ редактировать ]

Приведенный ниже алгоритм взят из Aho et al.: [6]

If $ is on the top of the stack and ip points to $ then return
else
    Let a be the top terminal on the stack, and b the symbol pointed to by ip
    if a  b or a  b then
        push b onto the stack
        advance ip to the next input symbol
    else if a  b then
        repeat
            pop the stack
        until the top stack terminal is related by  to the terminal most recently popped
    else error()
end

Функции приоритета

[ редактировать ]

Анализатор приоритета операторов обычно не хранит таблицу приоритетов с отношениями, которая может стать довольно большой. функции приоритета f и g . Вместо этого определены [7] Они отображают терминальные символы в целые числа, поэтому отношения старшинства между символами реализуются путем числового сравнения: должно сохраняться, если держится и т. д.

Не каждая таблица отношений предшествования имеет функции предшествования, но на практике для большинства грамматик такие функции могут быть разработаны. [8]

Алгоритм построения функций предшествования

[ редактировать ]

Приведенный ниже алгоритм взят из Aho et al.: [9]

  1. Создайте символы f a и g a для каждого грамматического терминала a и для символа конца строки;
  2. Разбейте созданные символы на группы так, чтобы f a и g b находились в одной группе, если (в одной группе могут находиться символы, даже если их терминалы не связаны этим отношением);
  3. Создайте ориентированный граф , узлами которого являются группы. Для каждой пары терминалов сделать: поместить ребро из группы g b в группу f a , если , в противном случае, если поместите ребро из группы f a в группу g b ;
  4. Если построенный граф имеет цикл, то функций предшествования не существует. Если циклов нет, пусть — длина самого длинного пути из группы f a , и пусть — длина самого длинного пути из группы g a .

Рассмотрим следующую таблицу (повторенную сверху): [10]

Использование алгоритма приводит к следующему графику:

    gid
      \
 fid   f*
    \  /
     g*
    /
  f+  
   | \
   |  g+
   |  |
  g$  f$

из которого мы извлекаем следующие функции предшествования по максимальным высотам в ориентированном ациклическом графе :

идентификатор + * $
ж 4 2 4 0
г 5 1 3 0

Языки приоритета операторов

[ редактировать ]

Класс языков, описываемых грамматиками приоритета операторов, т. е. языков с приоритетом операторов, строго содержится в классе детерминированных контекстно-свободных языков и строго содержит языки с видимым смещением вниз . [11]

Языки с приоритетом операторов обладают многими свойствами замыкания: объединением, пересечением, дополнением, [12] конкатенация, [11] и это самый большой известный класс, замкнутый относительно всех этих операций и для которого разрешима проблема пустоты. Еще одной особенностью языков с приоритетом операторов является их локальная разборчивость. [13] что обеспечивает эффективный параллельный анализ.

Существуют также характеристики, основанные на эквивалентной форме автоматов и монадической логике второго порядка. [14]

Примечания

[ редактировать ]
  • Ахо, Альфред В.; Сетхи, Рави; Уллман, Джеффри Д. (1988). Компиляторы — принципы, методы и инструменты . Аддисон-Уэсли.
  • Креспи Региззи, Стефано; Мандриоли, Дино (2012). «Приоритет операторов и свойство визуального нажатия» . Журнал компьютерных и системных наук . 78 (6): 1837–1867. дои : 10.1016/j.jcss.2011.12.006 .
  • Креспи Региззи, Стефано; Мандриоли, Дино; Мартин, Дэвид Ф. (1978). «Алгебраические свойства языков приоритета операторов» . Информация и контроль . 37 (2): 115–133. дои : 10.1016/S0019-9958(78)90474-6 .
  • Баренги, Алессандро; Креспи Региззи, Стефано; Мандриоли, Дино; Панелла, Федерика; Праделла, Маттео (2015). «Параллельный анализ стал практичным» . Наука компьютерного программирования . 112 (3): 245–249. дои : 10.1016/j.scico.2015.09.002 . HDL : 11311/971391 .
  • Лонати, Виолетта; Мандриоли, Дино; Панелла, Федерика; Праделла, Маттео (2015). «Языки приоритета операторов: их теоретико-автоматная и логическая характеристика». SIAM Journal по вычислительной технике . 44 (4): 1026–1088. дои : 10.1137/140978818 . hdl : 2434/352809 .

Дальнейшее чтение

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 293f714af8fe6ecde10f2bf7db8a1dbc__1699437600
URL1:https://arc.ask3.ru/arc/aa/29/bc/293f714af8fe6ecde10f2bf7db8a1dbc.html
Заголовок, (Title) документа по адресу, URL1:
Operator-precedence grammar - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)