Gramatica formală

Gramatica formală sau doar gramatica în teoria limbilor formale  este o modalitate de a descrie un limbaj formal, adică de a selecta un anumit subset din setul tuturor cuvintelor unui alfabet finit . Există gramatici generative și de recunoaștere (sau analitice ) - prima stabilește regulile cu care puteți construi orice cuvânt al limbii, iar a doua vă permite să determinați dintr-un anumit cuvânt dacă este inclus sau nu în limbă.

Termeni

Gramaticile generative

Cuvintele limbajului dat de gramatică sunt toate secvențele de terminale care sunt ieșite (generate) de la non-terminalul inițial conform regulilor de ieșire.

Pentru a seta gramatica, trebuie să setați alfabetele terminalelor și non-terminale, un set de reguli de inferență și, de asemenea, selectați-o pe cea inițială din setul de non-terminale.

Deci, gramatica este definită de următoarele caracteristici:

Concluzie

O ieșire este o secvență de linii formată din terminale și non-terminale, unde prima linie este o linie formată dintr-un neterminal de pornire, iar fiecare linie ulterioară este obținută de la cea anterioară prin înlocuirea unui subșir în funcție de unul (orice) a regulilor. Șirul final este un șir format în întregime din terminale și, prin urmare, este un cuvânt al limbii.

Existența unei derivații pentru un anumit cuvânt este un criteriu de apartenență a acestuia la limba definită de gramatica dată.

Tipuri de gramatici

Conform ierarhiei Chomsky , gramaticile sunt împărțite în 4 tipuri, fiecare ulterioară fiind un subset mai limitat față de cel precedent (dar și mai ușor de analizat):

În plus, există:

Aplicație

Un exemplu sunt expresiile aritmetice

Luați în considerare un limbaj simplu care definește un subset limitat de formule aritmetice constând din numere naturale , paranteze și semne aritmetice. Este de remarcat faptul că aici în fiecare regulă din partea stângă a săgeții există un singur simbol non-terminal. Astfel de gramatici sunt numite fără context .

Alfabetul terminalului:

= {'0','1','2','3','4','5','6','7','8','9','+','-', '*','/','(',')'}

Alfabetul non-terminal:

{ FORMULĂ, SEMN, NUMĂR, NUMĂR }

Reguli:

1. FORMULA FORMULA SEMNE FORMULA (o formulă are două formule legate printr-un semn) 2. NUMĂR DE FORMULĂ (formula este un număr) 3. FORMULA ( FORMULA ) (o formulă este o formulă între paranteze) 4. SEMNARE + | - | * | / (semnul este plus sau minus, sau înmulțire sau împărțire) 5. CIFRE NUMĂR (un număr este un număr) 6. NUMĂR NUMĂR CIFRE (un număr este un număr și un număr) 7. NUMĂRUL 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (cifra este 0 sau 1 sau ... 9)

Inițial non-terminal:

FORMULĂ

Concluzie :

Să derivăm formula (12+5) folosind regulile de inferență enumerate. Pentru claritate, părțile laterale ale fiecărei înlocuiri sunt afișate în perechi, în fiecare pereche piesa înlocuită este subliniată.

FORMULĂ (FORMULĂ) ( FORMULĂ ) ( FORMULĂ SEMNE FORMULĂ ) (FORMULA SEMNE DE FORMULĂ) (FORMULĂ + FORMULĂ) ( FORMULA + FORMULĂ ) ( FORMULĂ + NUMĂR ) ( FORMULA + NUMĂR ) ( FORMULĂ + NUMĂR ) (FORMULĂ + NUMĂR ) (FORMULĂ + 5 ) ( FORMULĂ + 5) ( NUMĂR + 5) ( NUMĂR + 5) ( NUMĂR CIFRA + 5) ( CIFRE NUMĂR + 5) ( CIFRE + 5) ( CIFRE + 5) ( 1 CIFRE + 5) (1 CIFRE + 5) (1 2 + 5)


Gramatici analitice

Gramaticile generative nu sunt singurele tipuri de gramatici, dar sunt cele mai comune în aplicațiile de programare. Spre deosebire de gramaticile generative, gramatica analitică (recunoașterea) definește un algoritm care vă permite să determinați dacă un anumit cuvânt aparține limbii. De exemplu, orice limbaj obișnuit poate fi recunoscut folosind o gramatică definită de o mașină de stări și orice gramatică fără context poate fi recunoscută folosind un automat bazat pe stivă . Dacă un cuvânt aparține unei limbi, atunci un astfel de automat își construiește rezultatul într-o formă explicită, ceea ce face posibilă analiza semantică a acestui cuvânt.

Vezi și

Note

  1. Matematică discretă, 2006 , p. 486.
  2. Matematică discretă, 2006 , p. 487.

Literatură