Sì, la tua grammatica è una grammatica ambigua!
Non hai parlare Ma penso <SL>
è iniziare valida
Usando le regole di grammatica possiamo trarre più di un albero sintattico (due) per strizzare i5i5yey
come followes:
<SL> <SL>
| |
<S> <S>
//|\ \ /| \
// | \ \ /| \
// | \ \ / | \
// | \ \ i <B> <S>
/| | | \ |//|\ \
i <B> <S> e <S> 5// | \ \
// | \ | // | \ \
// | \ y // | \ \
5 i <B> <S> /| | | \
| | i <B> <S> e <S>
5 y | | |
5 y y
Struttura di entrambi gli alberi di analisi sono diversi due la grammatica è una grammatica ambigua!
È possibile estendere sopra schema per generare stringa albero xi13yi5xeyx
, (lascio questo come un esercizio per voi)
Importante è la lingua di generare da questa grammatica è not ambiguous language .E la sua possibile scrivere un grammatica equivalente non ambigua per questa grammatica che genera sempre un albero univoco per ogni stringa nella lingua della grammatica.
SUGGERIMENTO: per scrivere una grammatica non ambigua.
La grammatica è molto simile alla grammatica per if loop
in linguaggio C (notare una lingua diversa con sintassi diversa per if loop
). e ha risolto in quasi tutti i libri di progettazione del compilatore.
Resolving the General Dangling Else/If-Else Ambiguity
Riferimento: Libro compilatori Principi, la tecnica e gli strumenti di Aho-Ullman paragrafo 4.5 conflitti durante il turno e-Ridurre l'analisi.
fonte
2013-03-07 19:29:35
Questa grammatica è scritta in forma Backus-Naur o è stata scritta con un'altra notazione? –