Il differenza principale tra grammatica ambigua e non ambigua è che il grammatica ambigua è una grammatica libera dal contesto per la quale esiste una stringa che può avere più di una derivazione più a sinistra mentre una grammatica non ambigua è una grammatica libera dal contesto per la quale ogni stringa valida ha una derivazione estrema più a sinistra.
La grammatica si riferisce alle regole sintattiche nelle lingue naturali. Nel 1956, gli scienziati informatici introdussero un modello matematico di grammatica per scrivere il linguaggio del computer. Se è possibile derivare tutte le stringhe di una lingua usando una certa grammatica, allora si dice che la lingua sia generata da quella grammatica. La grammatica libera dal contesto è un tipo di grammatica. Questa grammatica genera un linguaggio privo di contesto. La grammatica libera dal contesto può essere ambigua o non ambigua. Per una stringa particolare, se ci sono due o più derivazioni, quella grammatica si dice che sia ambigua. Per una stringa particolare, se esiste una sola derivazione più a sinistra, quella grammatica è detta grammatica non ambigua.
1. Cos'è la grammatica ambigua
- Definizione, Esempio
2. Cos'è la grammatica non ambigua
- Definizione, Esempio
3. Differenza tra grammatica ambigua e non ambigua
- Confronto tra le principali differenze
Grammatica ambigua, grammatica non ambigua
Si dice che una grammatica sia ambigua se esistono due o più derivazioni per una stringa.
Figura 1: Grammatica ambigua
Supponiamo che esista una grammatica definita come segue.
G = (S, a + b, +, *, P, S Le regole di produzione sono le seguenti: S -> S + S | S * S | a | b. Supponiamo che sia necessario genera la stringa a + a * b.
Considerare, S -> S + S
Sostituendo 'a' per sinistra più S darai il seguente.
S-> a + S
La sostituzione di S * S per S è la seguente.
S-> a + S * S
Sostituendo 'a' per il sinistro più S darai l'output sottostante.
S -> a + a * S
Sostituendo 'b' per S si otterrà il seguente risultato.
S -> a + a * b
Questa è la stringa richiesta da generare.
Quando si utilizza l'altra regola di produzione, lo darà
S -> S * S
Applicare S + S a sinistra più S darà il seguente.
S -> S + S * S
Sostituisci 'a' per sinistra più S,
S -> a + S * S
Sostituendo 'a' per la sinistra più S,
S -> a + a * S
La sostituzione di "b" per S darà il seguente risultato.
S -> a + a * b
Di nuovo, ha generato la stringa richiesta. Pertanto, esiste più di una derivazione per generare la stringa. Pertanto, è una grammatica ambigua.
In una grammatica ambigua, una determinata stringa ha una derivazione più a sinistra unica. Fare riferimento alle seguenti regole di produzione.
S -> L | a, L -> LS | S
Considera la regola S -> L. Sostituire LS invece di L.
S -> LS
Sostituto S, per primo L.
S -> S S
Sostituendo 'a' per la S più a sinistra otterrai l'output di sotto.
S -> a S
La sostituzione di "a" per S darà il seguente.
S -> a a
Pertanto, una stringa ha una derivazione più a sinistra unica. Quindi, è una grammatica non ambigua.
Una grammatica ambigua è una grammatica libera dal contesto per la quale esiste una stringa che può avere più di una derivazione o alberi di analisi più a sinistra. La grammatica non ambigua è una grammatica libera dal contesto per cui ogni stringa valida ha una derivazione o un albero di analisi più a sinistra.
Nella grammatica ambigua, una stringa può avere due o più derivazioni più a sinistra ma, in una grammatica non ambigua, una stringa ha una derivazione più a sinistra unica.
La grammatica libera dal contesto può essere ambigua o non ambigua. La differenza tra grammatica ambigua e non ambigua è che la grammatica ambigua è una grammatica libera dal contesto per la quale esiste una stringa che può avere più di una derivazione all'estrema sinistra mentre una grammatica non ambigua è una grammatica libera dal contesto per cui ogni stringa valida ha una derivazione estrema più a sinistra.
1. "Grammatica ambigua." Wikipedia, Wikimedia Foundation, 17 luglio 2018, disponibile qui.
2. "Design del compilatore | Grammatica ambigua. "GeeksforGeeks, 10 febbraio 2018, disponibile qui.
3. "Grammatica ambigua", Neso Academy, 29 marzo 2017, disponibile qui.
1. "Leftmostderivations jaredwf" di Jaredwf in Wikipedia in inglese - Trasferito da en.wikipedia a Commons da EdwardHades (dominio pubblico) tramite Commons Wikimedia