Gramatică ambiguă

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În informatică , o gramatică este numită ambiguă dacă există șiruri care pot fi generate, care pot fi produse cu derivări din stânga diferite (în engleză cea mai stângă derivare) sau, în mod echivalent, care au mai mult de un arbore de analiză posibil. Se spune că o limbă este inerent ambiguă atunci când poate fi generată doar de gramatici ambigue.

În ceea ce privește limbajele de programare , gramaticile ambigue pot face dificilă analiza (parsificarea) codului sursă. De obicei, generatorii parsificatori ( generator de parser sau compilator de compilatoare în engleză) care permit definirea limbajelor prin intermediul gramaticilor ambigue (de exemplu GNU Bison ) au metodele de rezoluție a ambiguității.

Exemplu gramatical ambiguu

Următorul context gramatică gratuită

A → A + A | A - A | la

este ambiguă, deoarece există două derivări stânga diferite pentru șirul a + a - a :

LA → A + A LA → A - A
→ a + A → A + A - A
→ a + A - A → a + A - A
→ a + a - A → a + a - A
→ a + a - a → a + a - a

În mod echivalent, este ambiguu, deoarece există doi arbori de parsificare diferiți pentru același șir:

Derivații din stânga jaredwf.svg

Cu toate acestea, limbajul generat nu este în mod inerent ambiguu: următoarea gramatică neechivocă generează același limbaj:

A → A + a | A - a | la

Elemente conexe

Alte proiecte