Який випадок використання в реальному світі використання граматики Чомського типу I (залежно від контексту)


9

Останнім часом я весело вивчаю розвиток мовних аналізаторів у контексті того, як вони вписуються в ієрархію Хомських.

Що таке хороший реальний (тобто не теоретичний) приклад контекстної граматики?


8
Чи враховується мова програмування?
Мартін Йорк

@LokiAstari Звичайно.
Еван Плейс

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

@Frank Я думаю, що моя проблема полягає в тому, що я не можу зрозуміти, що таке контекстно-залежна мова, не застосовуючи її до використання в реальному світі.
Еван Плейс

Є деякі людські мови, які можуть не потребувати рекурсивно перелічуваних мовних аналізаторів і, таким чином, потрапляють у набір мов типу 1 (контекстно-чутливий). cs.virginia.edu/~evans/cs3102/?p=138

Відповіді:


9

Хороше питання. Хоча, як зазначалося в коментарях, дуже багато мов програмування залежать від контексту, але контекстна чутливість часто не вирішується на фазі розбору, а на більш пізніх фазах - тобто, набір мови аналізується за допомогою граматики без контексту, а деякі з цих дерев розбору пізніше відфільтровують.

Однак це не означає, що ці мови не залежать від контексту , тому ось кілька прикладів:


Haskell дозволяє визначити функції, які використовуються як оператори, а також визначити пріоритет і асоціативність цих операторів. Іншими словами, ви не можете створити правильне дерево розбору для виразу оператора, наприклад:

a @@ b @@ c ## d ## e

якщо ви вже не проаналізували декларації пріоритетності / асоціативності для @@та ##:

infixr 8 @@
infixr 6 ##

Другий приклад - Bencode , мова даних, яка префіксує вміст за своєю довжиною:

<length>:<contents>

Проблема з цим форматом полягає в тому, що неможливо проаналізувати без чогось залежного від контексту, тому що єдиний спосіб визначити розміри "поля" - це ... проаналізувати рядок.


Третій приклад - XML, припускаючи, що дозволені довільні імена тегів: імена відкриваючих тегів повинні мати відповідні близькі теги:

<hi>
 <bye>
 the closing tag has to match bye
 </bye>
</hi> <!-- has to match "hi" -->

Цікаво. Я знав про XML. Я підозрюю, що привід за специфікацією XHTML 1.0 повинен був відійти від інтерпретаторів HTML у режимі "диваків", які підтримують винятки, що залежать від контексту, до більш чистого XML без контексту.
Еван Плейс

@EvanPlaice Мене бентежить ваш коментар - "чистий XML" є контекстно-залежним, як я показав у своєму прикладі.

4
@MattFenwick Я думаю, що ваш приклад XML не показує справжньої причини, чому XML не є контекстним. Причина в тому, що дозволені довільні імена тегів. Якби було дозволено лише певний набір тегів, XML був би без контексту.
Хонза Брабек

@HonzaBrabec ви праві - я неявно припускав, що дозволені довільні імена тегів. Я мав би прямо сказати це припущення. Дякую, що вказали на це!

3

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

Можливо, ви можете знайти приклад реального використання в одній із цих бібліотек:

http://en.wikipedia.org/wiki/List_of_natural_language_processing_toolkits

http://opennlp.sourceforge.net/projects.html

http://nltk.org/

http://nlp.stanford.edu/nlp/javadoc/javanlp/


2
А як щодо HTML-режиму "примірників" та препроцесорів коду, чи не зараховуються вони?
Еван Плейс

2

Контекстно-чутливі граматики іноді використовуються в описах семантики мови програмування. Мабуть, найповнішим використанням контекстно-чутливих граматик було визначення мови Algol68. Він використовував дворівневий вільний грамматик контексту (див. Http://en.wikipedia.org/wiki/Two-level_grammar ) для опису як синтаксису, так і семантики програм Algol68.

Кілька моїх колег використовували граматику ван Війнгаарден, щоб керувати їх виконанням Algol68 (див. Http://en.wikipedia.org/wiki/FLACC ).

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