~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 7D17A2CD91060BF6318A54AA0EE499C7__1708155960 ✰
Заголовок документа оригинал.:
✰ Syntactic predicate - Wikipedia ✰
Заголовок документа перевод.:
✰ Синтаксическое сказуемое — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Syntactic_predicate ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/7d/c7/7d17a2cd91060bf6318a54aa0ee499c7.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/7d/c7/7d17a2cd91060bf6318a54aa0ee499c7__translat.html ✰
Дата и время сохранения документа:
✰ 15.06.2024 17:35:50 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 17 February 2024, at 10:46 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Синтаксическое сказуемое — Википедия Jump to content

Синтаксический предикат

Из Википедии, бесплатной энциклопедии

Синтаксический предикат определяет синтаксическую достоверность применения продукции в формальной грамматике и аналогичен семантическому предикату , который определяет семантическую достоверность применения продукции. Это простой и эффективный способ значительно повысить эффективность распознавания LL-парсера за счет обеспечения произвольного просмотра вперед. В своей первоначальной реализации синтаксические предикаты имели вид «(α)?» и мог появиться только на левом краю постановки. Требуемым синтаксическим условием α может быть любой допустимый фрагмент контекстно-свободной грамматики.

Более формально, синтаксический предикат — это форма производственного пересечения , используемая в спецификациях синтаксического анализатора или в формальных грамматиках . В этом смысле термин предикат имеет значение математической индикаторной функции . Если p 1 и p 2 являются продукционными правилами, то язык , порожденный обоими p 1 и p 2, является пересечением их множеств.

Как обычно определяется или реализуется, синтаксические предикаты неявно упорядочивают продукцию так, чтобы предикатные продукции, указанные ранее, имели более высокий приоритет, чем предикатные продукции, определенные позже в рамках того же решения. Это дает возможность устранять неоднозначность неоднозначных результатов, поскольку программист может просто указать, какой продукт должен соответствовать.

Грамматики синтаксического анализа выражений (PEG), изобретенные Брайаном Фордом, расширяют эти простые предикаты, позволяя использовать «не предикаты» и позволяя предикату появляться в любом месте внутри продукта. Более того, Форд изобрел синтаксический анализ Packrat для обработки этих грамматик в линейном времени, используя мемоизацию за счет пространства в куче.

Можно поддерживать синтаксический анализ предикатов в линейном времени, такой же общий, как и те, которые разрешены PEG, но уменьшить затраты памяти, связанные с мемоизацией, избегая обратного отслеживания, где достаточно более эффективной реализации просмотра вперед. Этот подход реализован в ANTLR версии 3, которая использует детерминированные конечные автоматы для просмотра вперед; для этого может потребоваться проверка предиката для выбора между переходами DFA (так называемый синтаксический анализ «pred-LL(*)»). [1]

Обзор [ править ]

Терминология [ править ]

Термин синтаксический предикат был придуман Парром и Куонгом и отличает эту форму предиката от семантических предикатов (также обсуждаемых). [2]

назывались многошаговым сопоставлением , ограничениями синтаксического анализа и просто предикатами Синтаксические предикаты в различной литературе . (См. раздел «Ссылки» ниже.) В этой статье повсюду используется термин «синтаксический предикат» для обеспечения последовательности и для того, чтобы отличить их от семантических предикатов .

Свойства формального замыкания [ править ]

Бар-Хилель и др. [3] покажите, что пересечение двух регулярных языков также является регулярным языком, то есть регулярные языки замкнуты относительно пересечения .

Пересечение регулярного языка и контекстно-свободного языка также закрыто и известно как минимум со времен Хартманиса. [4] что пересечение двух контекстно-свободных языков не обязательно является контекстно-свободным языком (и, следовательно, не является замкнутым). Это можно легко продемонстрировать, используя канонический типа 1 : язык :

Позволять (Тип 2)
 Позволять (Тип 2)
 Позволять 

Учитывая строки abcc , aabbc и aaabbbccc , ясно, что единственная строка, которая принадлежит как L 1 , так и L 2 (то есть единственная строка, которая создает непустое пересечение), — это aaabbbccc .

Другие соображения [ править ]

В большинстве формализмов, использующих синтаксические предикаты, синтаксис предикатов некоммутативен , то есть операция предикации упорядочена. Например, используя приведенный выше пример, рассмотрим следующую псевдограмматику, где X ::= Y PRED Z означает: « Y производит X тогда и только тогда, когда Y также удовлетворяет предикату Z »:

S ::= а X
 X ::= Y ПРЕД Z
 Y ::= a+ BNCN
 Z ::= АНБН c+
 BNCN ::= b [BNCN] c
 АНБН ::= а [АНБН] б
 

Учитывая строку aaaabbbccc , в случае, когда Y должно быть удовлетворено первым (и при условии жадной реализации), S сгенерирует aX , а X, в свою очередь, сгенерирует aaabbbccc , тем самым сгенерировав aaaabbbccc . В случае, когда сначала должно быть удовлетворено Z , ANBN не сможет сгенерировать aaaabbb , и, следовательно, aaaabbbccc не генерируется грамматикой. Более того, если Y или Z (или оба) определяют какое-либо действие, которое необходимо предпринять при сокращении (как это имеет место во многих синтаксических анализаторах), порядок, в котором совпадают эти произведения, определяет порядок, в котором возникают эти побочные эффекты. Формализмы, которые изменяются со временем (например, адаптивные грамматики ), могут полагаться на эти побочные эффекты .

Примеры использования [ править ]

АНТЛР [ править ]

Парр и Куонг [5] приведите такой пример синтаксического предиката:

 стат  :   (  объявление  )  ?    декларация 
      |    выражение 
      ; 

который предназначен для удовлетворения следующих неофициально заявленных [6] ограничения C++ :

  1. Если это похоже на декларацию, то так оно и есть; в противном случае
  2. если это похоже на выражение, то так оно и есть; в противном случае
  3. это синтаксическая ошибка.

При первом создании правила stat синтаксический предикат (объявление)? указывает это объявление является синтаксическим контекстом, который должен присутствовать для успеха остальной части этого продукта. Мы можем интерпретировать использование (объявления)? как «Я не уверен, что декларация будет соответствовать; позвольте мне попробовать это, и, если оно не совпадет, я попробую следующее альтернатива.» Таким образом, при обнаружении действительного объявления объявление правила будет распознается дважды — один раз как синтаксический предикат и один раз во время фактического анализа для выполнения семантических действий.

В приведенном выше примере следует отметить тот факт, что любой код, инициируемый принятием создания объявления, произойдет только в том случае, если предикат удовлетворен.

Канонические примеры [ править ]

Язык можно представить в различных грамматиках и формализмах следующим образом:

Анализ грамматик выражений [ править ]
 S    &  (  А   !  б  )   а  +   Б   !   с 
  А    а   А  ?    б 
  Б    б   Б  ?    с 
§-исчисление [ править ]

Использование связанного предиката:

С → {А} Б 
А → Х 'с+'
 X → 'а' [X] 'б'
 Б → 'а+' Y
 Y → 'b' [Y] 'c'
 

Использование двух свободных предикатов:

A → <'a+'>  a  <'b+'>  b  Ψ(  a   b  ) Икс  <'c+'>  c  Ψ(  b   c  ) И 
X → 'а' [X] 'б'
 Y → 'b' [Y] 'c'
 
Конъюнктивная грамматика [ править ]

(Примечание: следующий пример фактически генерирует , но включен сюда, потому что это пример, приведенный изобретателем соединительных грамматик. [7] ):

S → AB&DC
 А → аА |  ε
 Б → BC |  ε
 С → СС |  ε
 Д → аДб |  ε
 
Правила Perl 6 [ править ]
 правило  S  {  <before <A> <!before b>> a+ <B> <!before c>  } 
   правило  A  {  a <A>?   б  } 
   правило  B  {  b <B>?   с  } 
 

Парсеры/формализмы, использующие ту или иную форму синтаксического предиката [ править ]

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

ANTLR (Парр и Куонг)
Первоначально реализовано, [2] синтаксические предикаты располагаются на крайнем левом краю вывода, так что попытка создания справа от предиката предпринимается тогда и только тогда, когда синтаксический предикат сначала принимает следующую часть входного потока. Несмотря на то, что предикаты упорядочены, в первую очередь проверяются предикаты, при этом синтаксический анализ предложения продолжается тогда и только тогда, когда предикат удовлетворен, а семантические действия происходят только в непредикатах. [5]
Расширенное сопоставление шаблонов (Balmas)
В своей статье об APM Балмас называет синтаксические предикаты «многоэтапным сопоставлением». [8] При анализе парсер APM может привязывать подстроки к переменной, а затем проверять эту переменную на соответствие другим правилам, продолжая анализ тогда и только тогда, когда эта подстрока приемлема для дальнейших правил.
Анализ грамматик выражений (Форд)
PEG Форда имеют синтаксические предикаты, выраженные как предикат «и» и «предикат не» . [9]
§-Исчисление (Джексон)
В §-исчислении синтаксические предикаты первоначально назывались просто предикатами , но позже были разделены на связанные и свободные формы, каждая из которых имеет разные входные свойства. [10]
Раку рулит
Raku представляет обобщенный инструмент для описания грамматики, называемый правилами , который является расширением синтаксиса регулярных выражений Perl 5. [11] Предикаты вводятся посредством механизма просмотра вперед, вызываемого ранее , либо с помощью " <before ...>" или " <!before ...>" (то есть: " не раньше"). Perl 5 также имеет такой просмотр вперед, но он может инкапсулировать только более ограниченные возможности регулярных выражений Perl 5.
Программатика (NorKen Technologies)
GDL (язык определения грамматики) ProGrammar использует синтаксические предикаты в форме, называемой ограничениями синтаксического анализа . [12] ВНИМАНИЕ: эта ссылка больше не действительна!
Конъюнктивная и булева грамматики (Охотин)
Конъюнктивная грамматика, впервые введенная Охотиным, [13] ввести явное понятие союза -как-предикации. Дальнейшее лечение конъюнктивных и логических грамматик. [14] является наиболее тщательной трактовкой этого формализма на сегодняшний день.

Ссылки [ править ]

  1. ^ Парр, Теренс (2007). Полный справочник по ANTLR: создание предметно-ориентированных языков . Программисты-прагматики . п. 328. ИСБН  978-3-540-63293-1 .
  2. ^ Перейти обратно: а б Парр, Теренс Дж .; Куонг, Рассел (октябрь 1993 г.). «Добавление семантических и синтаксических предикатов к LL(k): Pred-LL(k)» . Добавление семантических и синтаксических предикатов в анализ LL(k): pred-LL(k) . Препринт Армейского исследовательского центра высокопроизводительных вычислений № 93-096. стр. 263–277. CiteSeerX   10.1.1.26.427 . дои : 10.1007/3-540-57877-3_18 . Проверено 26 августа 2023 г.
  3. ^ Бар-Хилель, Ю .; Перлз, М.; Шамир, Э. (1961). «О формальных свойствах грамматик простых фразовых структур». Журнал фонетических, лингвистических и коммуникативных исследований . 14 (2): 143–172. .
  4. ^ Хартманис, Юрис (1967). «Бесконтекстные языки и вычисления на машине Тьюринга» . Материалы симпозиумов по прикладной математике . Математические аспекты информатики. 19 . АМС: 42–51. дои : 10.1090/psapm/019/0235938 . ISBN  9780821867280 .
  5. ^ Перейти обратно: а б Парр, Теренс; Куонг, Рассел (июль 1995 г.). «ANTLR: генератор синтаксического анализатора Predicate- LL(k) » (PDF) . Программное обеспечение: практика и опыт . 25 (7): 789–810. дои : 10.1002/спе.4380250705 . S2CID   13453016 .
  6. ^ Страуструп, Бьерн; Эллис, Маргарет А. (1990). Справочное руководство по C++ с аннотациями . Аддисон-Уэсли. ISBN  9780201514599 .
  7. ^ Охотин, Александр (2001). «Соединительные грамматики» (PDF) . Журнал автоматов, языков и комбинаторики . 6 (4): 519–535. дои : 10.25596/jalc-2001-519 . S2CID   18009960 . Архивировано из оригинала (PDF) 26 июня 2019 года.
  8. ^ Бальмас, Франсуаза (20–23 сентября 1994 г.). «Расширенное средство сопоставления шаблонов как инструмент синтеза концептуальных описаний программ». Труды КБСЕ '94. Девятая конференция по программной инженерии, основанной на знаниях . Материалы девятой конференции по программной инженерии, основанной на знаниях. Монтерей, Калифорния. стр. 150–157. дои : 10.1109/KBSE.1994.342667 . ISBN  0-8186-6380-4 .
  9. ^ Форд, Брайан (сентябрь 2002 г.). Анализ Packrat: практический алгоритм линейного времени с обратным отслеживанием (магистерская диссертация). Массачусетский Институт Технологий.
  10. ^ Джексон, Куинн Тайлер (март 2006 г.). Адаптация к Babel: адаптивность и контекстно-зависимость при синтаксическом анализе . Плимут, Массачусетс: Ibis Publishing. CiteSeerX   10.1.1.403.8977 .
  11. ^ Уолл, Ларри (2002–2006). «Краткий обзор 5: Регулярные выражения и правила» .
  12. ^ «Язык определения грамматики» . Норкен Технологии.
  13. ^ Охотин, Александр (2000). «О дополнении формализма контекстно-свободных грамматик операцией пересечения». Материалы четвертой международной конференции «Дискретные модели в теории систем управления» (на русском языке): 106–109.
  14. ^ Охотин, Александр (август 2004 г.). Булевы грамматики: выразительная сила и алгоритмы (докторская диссертация). Кингстон, Онтарио: Школа вычислительной техники Университета Квинса.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 7D17A2CD91060BF6318A54AA0EE499C7__1708155960
URL1:https://en.wikipedia.org/wiki/Syntactic_predicate
Заголовок, (Title) документа по адресу, URL1:
Syntactic predicate - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)