Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Gramatyka formalna - Wikipedia, wolna encyklopedia

Gramatyka formalna

Z Wikipedii

Gramatyką formalną nazywamy sposób opisu języka formalnego, czyli podzbioru zbioru wszystkich słów skończonej długości nad danym alfabetem.

Aby zdefiniować gramatykę formalną trzeba określić zbiór symboli terminalnych, zbiór symboli nieterminalnych, symbol startowy, oraz zbiór reguł które określają sposób w jaki wyprowadzamy słowa.

Symbole terminalne (równoważne symbolom alfabetu języka) są symbolami, które pozostaną w wyprowadzonym słowie – w przeciwieństwie do symboli nieterminalnych używanych tylko podczas wyprowadzania słowa. Reguły gramatyki postaci S_1 \rightarrow S_2, gdzie S1 i S2 to ciągi symboli terminalnych i nieterminalnych, określają możliwe podstawienia symboli w wyprowadzanym słowie. Wyprowadzanie rozpoczynamy od ciągu złożonego z wyróżnionego symbolu nazywanego symbolem początkowym. Odbywa się ono przez zastępowanie podciągów tego ciągu zgodnie z regułami gramatyki. Jeśli w ciągu mamy podciąg S1, możemy zastąpić go przez S2.

Rozważmy przykładową gramatykę z symbolem nieterminalnym S, który jest jednocześnie symbolem startowym, oraz zbiorem symboli terminalnych {a,b}. Reguły tej gramatyki, która umożliwia generowanie słów postaci ba, abab, aababb, aaababbb itd. wyglądają następująco:

  • S \rightarrow aSb
  • S \rightarrow ba

Zaczynamy od symbolu startowego S, możemy zastąpić go przez aSb zgodnie z pierwszą regułą. Możemy użyć jej jeszcze raz otrzymując aaSbb. Po użyciu drugiej reguły pozostanie nam ciąg aababb. Składa się on tylko z symboli terminalnych, więc wyprowadzenie słowa zostało zakończone.

Spis treści

[edytuj] Symbol startowy

Wymaganie, żeby symbol startowy był jeden, nie ogranicza nam szczególnie możliwości budowania gramatyk.

Jeśli chcemy zacząć generację od jakiegoś innego słowa w1, lub od pewnych kilku możliwych słów \{w_1,\dots,w_n\}, możemy dodać symbol "przedstartowy" S, oraz regułki postaci S\rightarrow w_i, o ile takie regułki mieszczą się w podzbiorze dozwolonych regułek dla danego typu gramatyk.

Wystarcza nam więc jeden symbol startowy, niezależnie od tego, od ilu możliwych słów zamierzamy zaczynać.

[edytuj] Symbole terminalne i nieterminalne

Nie ogranicza nas też specjalnie podział na symbole terminalne i nieterminalne. Jeśli chcemy możemy nawet wymagać, żeby po lewej stronie każdej reguły były tylko symbole nieterminalne.

Jeśli mamy w którymś miejscu symbol terminalny a, a chcemy mieć tam symbol nieterminalny, to tworzymy specjalny symbol nieterminalny Xa, i regułę X_a \rightarrow a. Wtedy wszędzie oprócz tej reguły zamiast a używamy Xa.

Dla przykładu, załóżmy że mamy gramatykę:

  • S \rightarrow abc
  • a \rightarrow bc
  • b \rightarrow ca
  • c \rightarrow ab

I chcemy żeby po lewej stronie były tylko symbole nieterminalne. Dodajemy więc następujące reguły:

  • X_a \rightarrow a
  • X_b \rightarrow b
  • X_c \rightarrow c

A te już istniejące zamieniamy na:

  • S \rightarrow X_aX_bX_c
  • X_a \rightarrow X_bX_c
  • X_b \rightarrow X_cX_a
  • X_c \rightarrow X_aX_b

Tej techniki używa się np. w budowaniu postaci normalnej Chomsky'ego gramatyk bezkontekstowych.

[edytuj] Alternatywa języków

Załóżmy że mamy gramatykę G1 generującą język L1 i G2, generującą język L2, i chcemy uzyskać język wszystkich słów które są albo w L1 albo w L2.

W tym celu tworzymy symbol startowy S i dodajemy regułki przepisania go na symbol startowy pierwszego bądź drugiego języka:

S\rightarrow S_1
S\rightarrow S_2
oraz wszystkie regułki obu gramatyk.

Słowo będzie więc należało do języka jeśli da się wyprowadzić w jednej z gramatyk. Musimy jednak zadbać o to, żeby nie wolno było mieszać wyprowadzeń – tak, że część słowa jest wyprowadzona pierwszą gramatyką, a część drugą. Zanim więc połączymy zbiory reguł obu gramatyk, przekształćmy je najpierw tak, żeby po lewej stronie wszystkich reguł były wyłącznie nieterminale, i zmieńmy nazwy wszystkich nieterminali, żeby żaden nieterminal nie występował jednocześnie w obu gramatykach (to jak nazwane będą nieterminale nie wpływa w żaden sposób na to, jaki język dana gramatyka generuje). Jeśli gramatyki są tej postaci, to w żaden sposób nie da się w jednym wyprowadzeniu użyć reguł obu gramatyk.

Algorytm taki nie istnieje dla dopełnienia języka (zbioru wszystkich słów które nie należą do danego języka). Jest nawet możliwe, że dany język opisuje jakaś gramatyka, ale dla zbioru słów nie należących do niego nie ma żadnej gramatyki).

Dla dwóch gramatyk potrafimy też znaleźć gramatykę przecięcia języków (zbioru słów należących do obu języków), ale jej postać może być o wiele trudniejsza od postaci gramatyk oryginalnych.

[edytuj] Klasy gramatyk

Ograniczając postać reguł wyprowadzania otrzymujemy klasy gramatyk, takie jak (szczegółowo w artykule hierarchia Chomsky'ego):

Gramatyka regularna (odpowiednio: bezkontekstowa, kontekstowa) zawsze generuje język regularny (odp.: bezkontekstowy, kontekstowy). Jednak możliwe jest też, że pewna gramatyka, która nie jest regularna (bezkontekstowa, kontekstowa), generuje język regularny (bezkontekstowy, kontekstowy). W takim przypadku zawsze istnieje też gramatyka o regułach prostszej postaci generująca ten sam język.

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com