Documente Academic
Documente Profesional
Documente Cultură
Reprezentarea limbajelor
În acest capitol se vor defini noţiunile principale legate de limbaje, precum şi de cele două
metode de specificare a limbajelor.
Definiţia 1.1.
(1) Se numeşte alfabet o mulţine finită şi nevidă, notată în mod uzual cu Σ, ale cărei elemente
se numesc simboluri.
(2) Fiind dat un alfabet Σ, o succesiune de simboluri din Σ se numeşte cuvânt peste Σ, sau şir
sau secvenţă.
Două alfabete foarte uzuale sunt alfabetul latin, format din 26 de litere, precum şi alfabetul
binar, format din mulţimea {0, 1}.
Pentru evitarea confuziilor, simbolurile dintr-un alfabet se vor nota cu litere de la începutul
alfabetului latin, iar cuvintele se vor desemna prin litere de la sfârşitul alfabetului.
Pentru simplificarea descrierii noţiunilor legate de limbaje, în continuare se vor utiliza câteva
notaţii:
• Se numeşte cuvânt vid şi se notează cu ε, o secvenţă care nu conţine nici un simbol;
• Se notează cu Σ+ mulţimea tuturor cuvintelor nevide din alfabetul Σ;
• Se notează cu Σ* mulţimea tuturor cuvintelor din alfabetul Σ:
Σ+ = Σ* ∪ {ε}
Una dintre cele mai uzuale operaţii care se pot aplica asupra cuvintelor (care sunt secvenţe de
simboluri) este operaţia de concatenare. Dacă Σ este un alfabet şi Σ* mulţimea cuvintelor
peste Σ, atunci operaţia de concatenare a două cuvinte peste Σ se notează cu caracterul ‘⋅’ şi
este o aplicaţie definită astfel:
⋅ : Σ *×Σ* → Σ*
De exemplu, dacă x şi y sunt două cuvinte peste Σ, concatenarea lor este tot un cuvânt peste Σ,
notat x⋅y. În cazul în care nu există nici un fel de confuzie, operatorul ‘⋅’ se poate omite, aşa
încât notaţia xy reprezintă în mod uzual concatenarea lui x cu y.
Observaţie. În afară de cuvântul vid, se mai utilizează noţiunea de cuvânt unitar. Un cuvânt
unitar este un cuvânt format dintr-un singur simbol. De multe ori, un cuvânt unitar se
specifică prin simbolul conţinut şi nu trebuie să existe confuzie între utilizarea unui caracter
ca un simbol şi ca un cuvânt. De exemplu, dacă x este un cuvânt şi a un simbol, atunci în
notaţia xa, a reprezintă cuvântul unitar format din caracterul a.
O altă noţiune utilizată este cea de lungime a unui cuvânt. Lungimea unui cuvânt x reprezintă
numărul de simboluri ale cuvântului şi se notează cu |x|. Definirea formală a lungimii unui
cuvât se poate realiza de asemenea într-un mod recursiv:
Definiţia 1.3. Fie Σ un alfabet şi x∈Σ* un cuvânt peste Σ. Lungimea cuvântului x se notează
cu |x| şi este definită astfel:
- |x| = 0, dacă x=ε
- |x| = |y|+1, dacă x=ya, unde y∈Σ* şi a∈Σ
Se observă faptul că definiţia anterioară se aplică în mod recursiv unui cuvânt, prin
contorizarea tuturor simbolurilor acestuia, de la dreapta spre stânga. La ultima aplicare a
relaţiei, cuvântul rămas după înlăturarea simbolurilor este cuvântul vid.
Definiţia 1.4. Fie Σ un alfabet şi x,y∈Σ* două cuvinte peste Σ. Concatenarea lui x şi y se
notează x⋅y şi este definită astfel:
- x⋅y = x, dacă x=ε
- x⋅y = (x⋅w)⋅a, dacă x=w⋅a, unde w∈Σ * şi a∈Σ
Notaţie. Dacă a∈Σ, atunci cuvântul a⋅a⋅ … ⋅a, obţinut prin concatenarea de n-1 ori a
simbolului a se notează în mod uzual cu an.
Deoarece operaţia de concatenare este asociativă, iar cuvântul vid este un element neutru
pentru concatenare (xε = εx = x, pentru orice cuvânt x), mulţimea Σ* formează un monoid
împreună cu compunerea. El se numeşte monoidul liber generat de alfabetul Σ. Neluând în
considerare cuvântul vid, operaţia de concatenare determină un semigrup peste Σ.
Definiţia 1.5. Fie Σ un alfabet, ‘⋅’ operaţia de concatenare peste Σ+ şi ε cuvânul vid.
(1) Semigrupul (Σ+, ⋅) se numeşte semigrup liber peste Σ;
(2) Monoidul (Σ *, ⋅, {ε}) se numeşte monoid liber peste Σ.
Observaţie. Elementele mulţimii Σ joacă rol de generatori pentru semigrupul liber Σ+.
Definiţiile următoare introduc alte câteva notaţii uzuale pentru cuvinte: inversul unui cuvânt,
prefixul şi sufixul al unui cuvânt.
1.1.2 Limbaje
Definiţia 1.8. Se numeşte limbaj peste un alfabet Σ o parte a monoidului liber Σ*.
Deci un limbaj peste un alfabet Σ este o submulţime (nu neapărat proprie) a mulţimii Σ*,
înzestrată cu operaţia de concatenare.
Exemple.
1) Mulţimile Φ şi {ε} sunt două limbaje distincte (primul nu are nici un cuvânt, pe când al
doilea conţine doar cuvântul vid).
2) L = {an | n≥0} = {a}* este un limbaj ale cărui cuvinte conţin zero sau mai multe apariţii
consecutive ale simbolului a.
După cum se poate observa, mulţimea Σ* ce conţine toate cuvintele generate peste alfabetul Σ
poate să fie o mulţime infinită, aşa cum este de exemplu mulţimea {a}*. Această mulţine are
însă o proprietate foarte importantă: ea este numărabilă, după cum se observă din teorema
următoare.
Deoarece un limbaj este în esenţă o mulţime de cuvinte, asupra limbajelor se pot aplica
principalele operaţii aferente mulţimilor. În plus, se poate defini şi operaţia de concatenare a
două limbaje.
Definiţia 1.10. Fie L1 şi L2 două limbaje peste Σ. Se numeşte concatenarea sau produsul
limbajelor L1 şi L2 şi se notează L1L2 limbajul definit astfel:
L1L2 = {xy | x∈L1, y∈L2}
Observaţie. Operaţia de concatenare este distributivă faţă de reuniune:
L1(L2∪L3) = L1L2 ∪L1L3
(L1∪L2)L3 = L1L3 ∪L2L3
Definiţia 1.11. Închiderea tranzitivă prin produs a unui limbaj L, numită şi închiderea
pozitivă este un limbaj notat L+ şi definit astfel:
L+ = ∪n≥1 (Ln)
Operaţia de închidere tranzitivă şi reflexivă a limbajului L, numită simplu operaţie de
închiderea este un limbaj notat L* şi definit astfel:
L* = ∪n≥0 (Ln)
Cel mai frecvent utilizat mod prin care se pot face aplicaţii între diferite limbaje este cel dat
de noţiunea de homomorfism. Definirea homomorfismului între limbaje este permisă de
următoarea teoremă.
Observaţii.
1) Fiind date două alfabete Σ 1 şi Σ 2 şi un homomorfism ϕ: Σ1 → Σ2*, acesta se poate extinde
unic la un homomorfism:
ϕ1 : Σ 1 * → Σ 2 *
definit astfel:
ϕ1(ε) = ε,
ϕ1(xa) = ϕ(x)ϕ(a), ∀x∈Σ1*, a∈Σ 1
2) Aplicând homomorfismul ϕ la limbaje, pentru un limbaj L, se poate defini un alt limbaj
ϕ(L) astfel: ϕ(L) = {ϕ(w) | w∈L}
Exemplul 1.2. Dacă, pentru un limbaj L, se doreşte înlocuirea oricărui simbol 0 cu simbolul a
în oricare cuvânt, precum şi înlocuirea lui 1 cu secvenţa bb, se poate defini homomorfismul:
ϕ(0) = a, ϕ(1) = bb
Atunci, pentru limbajul:
L = {0n1n | n≥1}
se obţine limbajul următor:
L1 = ϕ(L) = {anb2n | n≥1}
Nu întotdeauna homomorfismele de limbaje sunt aplicaţii bijective. Din acest motiv, de multe
ori este indicat să se determine inversul unui homomorfism, privit ca o relaţie.
Deci, dacă y este un cuvânt peste alfabetul Σ 2, atunci ϕ-1(y) reprezintă mulţimea cuvintelor
peste alfabetul Σ1, care sunt aplicate de ϕ în y.
Observaţie. Dacă L este un limbaj peste Σ2, atunci ϕ-1(L) este un limbaj peste Σ1, care constă
din toate cuvintele care sunt aplicate prin ϕ în cuvinte din L:
ϕ-1(L) = ∪y∈L (ϕ-1(y)) = {x∈Σ1* | ϕ(x)∈L}
Exemple.
(1) Fie ϕ un homomorfism aşa încât ϕ(0)=a şi ϕ(1)= ε. Atunci:
ϕ-1(ε) = 1*
ϕ-1(a) = 1*01*, unde 1*01* reprezintă limbajul {1i01j | i, j≥0}
(2) Dacă ϕ este un homomorfism aşa încât ϕ(0)=a şi ϕ(1)=a. Atunci:
ϕ-1(a) = {0, 1}
ϕ-1(a*) = {0, 1}*
Este important deci ca specificarea unui limbaj să poată fi realizată într-o manieră finită, altfel
decât prin enumerarea cuvintelor limbajului. Există două metode importante utilizate pentru
definirea finită a limbajelor:
• procedee de recunoaştere a cuvintelor unui limbaj L, care pentru fiecare cuvânt x din
mulţimea Σ*, răspund dacă x aparţine sau nu lui L;
• procedee care permit generarea cuvintelor din limbajul L prin specificarea unor reguli
de formare ale acestora.
Prima metodă utilizează aşa numitele automate de recunoaştere ale cuvintelor, pe când
ultima metodă utilizează un sistem de generare al cuvintelor numit gramatică. Gramaticile
permit ca fiecare cuvânt dintr-un limbaj să poată fi generat cu ajutorul unor metode de
generare numite producţii.
Cea mai importantă parte a gramaticii este o mulţime finită de reguli de formare a cuvintelor
numite producţii, care este demnată în mod uzual prin litera P.
O producţie este practic o pereche de cuvinte, fiind un element din produsul cartezian:
(N∪Σ)*N(N∪Σ)* × (N∪Σ)*
Cu alte cuvinte, prima componentă conţine cel puţin un simbol neterminal, iar a doua
componentă poate fi orice cuvânt peste alfabetul N∪Σ.
O producţie de forma (α, β) înseamnă faptul că şirul α poate fi înlocuit de şirul β în timpul
operaţiei de generare a unui cuvânt din limbaj. De exemplu, să considerăm că perechea (AB,
CDE) este o producţie. Atunci, dacă α este un cuvânt ce poate fi generat de gramatică şi care
conţine AB ca subşir (partea stângă a producţiei), rezultă că gramatica poate de asemenea să
genereze un alt cuvânt, β, care se obţine din α prin înlocuirea şirului AB cu şirul CDE (partea
dreaptă a producţiei).
O altă notaţie uzuală utilizată în cadrul gramaticilor este cea de derivare. Ea este o noţiune
echivalentă pentru cea de generare. Dacă o gramatică poate genera un cuvânt α, atunci se
spune că α poate fi derivat de gramatica respectivă.
Deoarece o formă propoziţională este un cuvânt ce poate conţine atât simboluri terminale, cât
şi simboluri neterminale, se poate defini o noţiune numită propoziţie, care este o formă
propoziţională ce nu conţine decât simboluri terminale.
Se vor introduce acum câteva notaţii uzuale referitoare la gramatici şi limbaje generate de
acestea.
Atunci când nu există nici o confuzie asupra gramaticii G, litera respectivă poate fi omisă ca
indice în relaţia de derivare, aşa încât relaţia ⇒G poate fi scrisă simplificat ca ⇒.
Pentru a deriva o propoziţie a limbajului, îm mod uzual nu este suficientă o singură derivare,
fiind necesari mai mulţi paşi.
În cazul în care în mulţimea producţiilor unei gramatici există mai multe producţii care au în
partea stângă acelaşi cuvânt, există o scriere uzuală simplifictă. De exemplu, pentru
producţiile:
α→β1
α→β2
…
α→βn
notaţia uzuală simplificată este următoarea:
α→β1 | β2 | … βn
De asemenea, există notaţii uzuale pentru reprezentarea diferitelor simboluri şi cuvinte
generate de gramatici:
• Pentru simbolurile terminale, se utilizează literele mici, de la începutul alfabetului
latin: a, b, c, …
• Pentru simbolurile neterminale, se utilizează literele mari, de la începutul
alfabetului latin: A, B, C, …
• Pentru simbolul de start al gramaticii se utilizează litera S
• Pentru reprezentarea cuvintelor terminale, se utilizează literele mici de la sfârşitul
alfabetului latin: u, v, w, …, z
• Pentru reprezentarea cuvintelor terminale şi neterminale, se utilizează literele mici
ale alfabetului grec: α, β, γ, δ, …
Observaţii.
(1) Se observă din definiţia anterioară faptul că orice gramatică liniară la dreapta este în
acelaşi timp şi o gramatică independentă de context.
(2) Se observă de asemenea faptul că o gramatică dependentă de context nu permite producţii
de forma A → ε, numite şi ε-producţii. Rezultă faptul că o gramatică independentă de
context ce conţine ε-producţii nu este o gramatică dependentă de contex. Această restricţie
a fost impusă pentru a permite limbajului generat de o gramatică dependentă de context să
fie recursiv sau decidabil, dupe poate observa din teorema care urmează.
(3) În cazul gramaticilor independente de context, se observă faptul că indiferent de contextul
apariţiei sale într-o formă propoziţională, simbolul neterminal A se poate înlocui cu şirul
α.
(4) În cazul gramaticilor dependente de context, producţiile acesteia se pot scrie şi sub forma:
αAβ → αγβ, unde γ≠ε
Din această formă, se observă faptul că un simbol neterminal A se poate substitui prin
şirul γ doar în contextul determinat de α şi β.
(5) Gramaticile liniare la dreapta au această denumire deoarece orice simbolul neterminal care
se înlocuieşte într-o formă propoziţională este întotdeauna aflat în extremitatea dreaptă a
formei propoziţionle.
Motivul principal pentru care nu sunt permise ε-producţiile într-o gramatică dependentă de
context este problema decidabilităţii. Aceasta înseamnă că pentru o gramatică dependentă de
context G = (N, Σ, P, S), se poate găsi un algoritm care determină dacă un cuvânt w∈Σ *
aparţine sau nu limbajului L(G).
Cele patru tipuri de gramatici formează aşa-numita ierarhie Chomsky. O gramatică liniară la
dreapta se numeşte gramatică de tipul 3 în această ierarhie. O gramatică independentă de
context se numeşte gramatică de tipul 2 în ierarhia Chomsky, o gramatică dependentă de
context se numeşte gramatică de tipul 1, iar o gramatică nerestricţionată se numeşte gramatică
de tipul 0.
Exemplul 1.6.
1) Gramatică de tipul 3:
G = ({S}, {0, 1}, P, S)
P: S → 0S | 1S | ε
Limbajul generat de gramatică este:
L(G) = {0, 1}*
2) Gramatică de tipul 2 - gramatica expresiilor aritmetice ce pot fi construite cu simbolurile
a, +, *, ( şi ) :
G = ({E, T, F}, {a, +, *, (, )}, P, E}
P: E → E+T | T
T → T*F | F
F → (E) | a
3) Gramatică de tipul 3:
G = ({S, B, C}, {a, b, c)}, P, S}
P: S → aSBC | abC
CB → BC
bB → bb
bC → bc
cC → cc
Limbajul generat de granatică este:
L(G) = {anbncn | n≥1}
După cum se poate observa din teorema următoare, între mulţimile limbajelor de diferite
ordine există o relaţie de includere, ceea ce justifică denumirea de ierarhie de limbaje. Orice
limbaj limbaj regulat este un limbaj independent de context. La rândul său, orice limbaj
independent de context care nu conţine şirul vid este o submulţime proprie a unui limbaj
dependent de context. De asemenea, un limbaj dependent de context este o submulţime
proprie a unei mulţimi recursive, care la rândul său este o submulţime a unei mulţimi recursiv
enumerabile.
Pentru a elimina asimetria care există între limbajele ℒ1 şi ℒ2, în mod uzual se consideră că
mulţimea limbajelor dependente de context conţine atât limbajele generate de gramaticile
dependente de context, la care se adaugă, pentru fiecare asemenea limbaj L, limbajul L’ ce
conţine în plus cuvântul vid, L’ = L ∪ {ε}.
Teorema 1.4. Între clasele de limbaje din ierarhia Chomsky există relaţiile următoare:
ℒ0 ⊃ ℒ 1 ⊃ ℒ 2 ⊃ ℒ3
1.3 Automate de recunoaştere (de acceptare)
A doua metodă de specificare finită a unui limbaj constă în definirea unui automat de
recunoaştere sau de acceptare a cuvintelor din limbaj.
În esenţă, un automat de recunoaştere este o procedură utilizată pentru definirea unei mulţimi
de cuvinte. El poate fi reprezentat grafic ca în figura 1.1.
Banda de
a0 a1 an
intrare
Cap de citire
Unitate Memorie
de control auxiliară
Figura 1.1
Banda de intrare este considerată formată dintr-o secvenţă liniară de celule, fiecare conţinînd
exact un simbol de intrare dintr-un alfabet finit de intrare. Capul de citire poate citi în fiecare
moment o celulă şi se poate deplasa de la stânga la dreapta, sau poate rămâne staţionar. Un
asemenea automat se numeşte în mod uzual automat cu o singură cale. În mod uzual, banda
de intrare poate fi folosită doar pentru citire, simbolurile de intrare neputând fi modificate în
timpul evoulţie automatului. Memoria automatului poate stoca orice tip de date. Trebuie însă
să existe un alfabet finit al memoriei şi ea să conţină doar simboluri ale acestui alfabet într-o
organizare oarecare, iar conţinutul memoriei să poată fi descris in fiecare moment într-un mod
finit. În mod uzual, numele unui automat de recunoaştere este dat de tipul memoriei
automatului.
Un exemplu de memorie auxiliară este stiva, sau lista “push-down”, care poate fi reprezentată
în mod abstract printr-un şir de simboluri ale memoriei, (z1, z2, …, zn), care aparţin unui
alfabet al memoriei, notat cu Γ, iar z1 este primul element din şir precum şi singurul care
poate fi accesat de către capul de citire. Un automat cu un astfel de tip de memorie este numit
automat push-down şi este foarte utilizat în cazul limbajelor independente de context.
Comportarea memoriei auxiliare pentru o clasă de automate este caracterizată prin două
funcţii: cea de stocare în memorie, precum şi cea de citire din memorie.
Funcţia de citire din memorie este o aplicaţie definită de la mulţimea configuraţiilor posibile
ale memoriei la o mulţime finită de simboluri de informaţie, care pot fi aceleaşi cu alfabetul
memoriei. De exemplu, pentru o memorie de tip listă push-down, funcţia de citire din
memorie poate fi definită prin:
f: Γ* → Γ,
f(z1z2 … zn) = z1
Funcţia de stocare descrie modul în care memoria poate fi modificată, ea fiind o aplicaţie
definită pe produsul cartezian dintre conţinutul memoriei şi o mulţime de şiruri de control ale
acesteia De exemplu, pentru o listă push-down, funcţia de memorare poate înlocui primul
simbol cu un şir finit de alte simboluri din alfabetul memoriei. O asemenea funcţie se poate
reprezenta astfel:
g: Γ* × Γ* → Γ* ,
g(z1 … zn, y1 … yk) = y1 … ykz2 … zn
Se observă faptul că se poate înlocui z1 cu un şir vid, astfel încât următorul simbol ce va putea
fi citit de următoarea operaţie de citire din memorie este z2.
Evoluţia unui automat de recunoaştere se descrie prin intermediul stărilor acestuia. Gestiunea
automatului se realizează prin intermediul unei unităţi de control a stărilor, sau pe scurt
unitatea de control, care poate fi un program ce determină modul de evoluţie al stărilor
automatului.
Astfel, evoluţia unui automat de recunoaştere poate fi reprezentată printr-o mulţime de stări,
împreună cu o aplicaţie care descrie modificarea stărilor, în funcţie de simbolul curent de
intrare şi de informaţia curentă citită din memorie. De asemenea, la trecerea dintr-o stare
curentă în într-o stare următoare, trebuie determinată informaţia care trebuie memorată în
starea următoare.
O altă noţiune uzuală folosită pentru descrierea evoluţiei unui automat este cea de
configuraţie. O configuraţie a automatului este definită de:
• starea curentă a automatului;
• conţinutul benzii de intrare, precum şi a locaţiei curente de citire de pe aceasta;
• conţinutul memoriei.
Trecerea de la configuraţie la alta se realizează prin intermediul unor mişcări. O mişcare este
determintă în mod uzual de simbolul curent de intrare, precum şi de informaţia curentă citită
din memorie, iar acţiunile determinate de ea sunt:
• mutarea capului de citire cu o celulă spre stânga, spre dreapta, sau rămânerea pe
poziţia curentă;
• memorarea unei anumite informaţii în memoria auxiliară;
• schimbarea stării curente de control.
Configuraţia iniţială a unui automat este în mod uzual unică şi specifică starea curentă de
control ca fiind starea iniţială, capul de citire poziţionat pe simbolul cel mai din stânga al
benzii de intrare, iar conţinutul memoriei ca având o structură iniţială. Configuraţia finală nu
este întotdeauna unică, un automat de recunoaştere putând avea o mulţime de configuraţii
finale posibile, determinate de mulţimea stărilor finale de control. Într-o configuraţie finală,
starea curentă de control a automatului este o stare finală, iar capul de citire este poziţionat
după ultimul simbol de pe banda de intrare.
Trecerea dintr-o stare curentă într-o stare următoare nu este întotdeauna unic determinată, iar
din acest motiv este posibil ca plecând dintr-o anumită configuraţie să existe mai multe
mişcări posibile. Un automat de recunoaştere se spune că este:
• determinist, dacă pentru fiecare configuraţie, există cel mult o singură posibilitate de
mişcare spre configuraţia următoare;
• nedeterminist, dacă în fiecare configuraţie există o mulţime de una sau mai multe
mişcări spre o configuraţie următoare.
Funcţia δ descrie modul de tranziţie între o stare curentă şi o stare următoare a unităţii de
control. În cazul unui automat determinist, starea următoare unei stări curente este unic
determinată, astfel încât funcţia de tranziţie este definită astfel:
δ: Q × Σ × Γ* → Q × Γ*
δ(q1, a, γ1) = (q2, γ2)
unde:
- q1 reprezintă starea curentă a unităţii de control, iar q2 reprezintă satrea următoare;
- a reprezintă simbolul curent de intrare aflat be banda de intrare şi care urmează să fie
citit de capul de citire;
- γ1 reprezintă starea curentă a memoriei automatului, iar γ2 memoria automatului în
starea următoare.
În cazul unui automat nedeterminist, starea următoare a unităţii de control nu este unic
determinată, astfel încât valorile funcţiei δ reprezintă o mulţime de elemente (q2, γ2). În acest
caz, funcţia se poate defini astfel:
δ: Q × (Σ ∪{ε}) × Γ* → ℘(Q × Γ*)
δ(q1, a, γ1) ⊆ {(q2, γ2) | q2∈Q, γ2∈Γ*}
Se pot acum defini mai formal noţiunile de configuraţie şi cea de mişcare între două
configuraţii. Configuraţia unui automat de acceptare este un tuplu de forma:
(q, x, i, γ)
unde:
- q∈Q reprezintă starea curentă a unutăţii de control;
- x∈Σ * reprezintă şirul de pe banda de intrare; în cazul automatelor cu o singură cale, x
reprezintă şirul de pe banda de intrare necitit încă;
- i∈N reprezintă poziţia capului de citire pe banda de intrare a automatului; în cazul
automatelor cu o singură care, i este o informaţie redondantă;
- γ∈Γ* reprezintă conţinutul curent al memoriei.
Relaţia de mişcare între două configuraţii se notează în mod uzual cu simbolul ⊢ şi se poate
defini pe baza funcţiei δ: între două configuraţii (q1, ax, i, γ1) şi (q2, x, j, γ2) se spune că există
o relaţie de mişcare şi se notează (q1, ax, i, γ1) ⊢ (q2, x, j, γ2) dacă:
δ(q1, ax, i, γ1) = (q2, γ2)
j = i + 1, dacă a∈Σ,
j = i, dacă a = ε
Despre un automat se spune că acceptă sau recunoaşte un cuvânt de intrare w, dacă pornind
de la o configuraţie iniţială şi având simbolurile din w pe banda de intrare, acesta realizează o
secvenţă de mişcări care aduce automatul într-o configuraţie finală.
Definiţia exactă a acestor automate va fi specificată în capitolele următoare, dar relaţia lor cu
limbajele din ierarhia Chomsky poate fi descrisă astfel:
• Un limbaj este liniar la dreapta dacă şi numai dacă este definit de un automat finit
determinst;
• Un limbaj este independent de context dacă şi numai dacă este definit de un automat
nedeterminist push-down;
• Un limbaj este dependent de context dacă şi numai dacă este definit de un automat
nedeterminist liniar mărginit;
• Un limbaj este recursiv enumerabil dacă şi numai dacă este definit de o maşină Turing.