Ho una grammatica e posso verificare se LL (1) è o meno. Tuttavia, esiste un modo per verificare se la lingua generata dalla grammatica è LL (1)? E qual è esattamente la differenza tra grammatiche LL (1) e lingue LL (1)?Come determinare se una lingua è LL (1)?
risposta
Qualsiasi grammatica che sia LL (1) definisce una lingua LL (1). Per definizione, una lingua è LL (1) se c'è una grammatica che la genera che è LL (1), quindi il fatto che tu abbia una grammatica LL (1) per la lingua significa automaticamente che la lingua è LL (1) .
Per elaborare, una lingua è un insieme di archi e una grammatica per quella lingua è un mezzo per descrivere quella lingua. Alcune lingue hanno grammatiche LL (1) mentre altre no. Tuttavia, il fatto che una grammatica non sia LL (1) non significa che la lingua che descrive non lo sia. Ad esempio, si consideri questa grammatica:
A -> ab | ac
Questa grammatica non è LL (1) perché contiene un primo conflitto/PRIMO quando si cerca di prevedere la produzione per un vedendo terminale a. Tuttavia, si descrive un (1) linguaggio LL, dal momento che la lingua è descritta anche dalla grammatica
A -> aX
X -> b | c
Così il linguaggio generato da queste grammatiche (che contiene solo AB e AC) è infatti LL (1).
Determinare se la lingua descritta da una grammatica arbitraria è LL (1) è molto più difficile e, per quanto ne so, l'unico modo per farlo sarebbe mostrare esplicitamente una grammatica LL (1) per la lingua generata dalla grammatica iniziale (che è difficile) o per dimostrare matematicamente che non esiste una tale grammatica.
Spero che questo aiuti!
Quindi una LL (1) * lingua * può essere definita da un numero di altre * grammatiche * che non sono LL (1) (purché esista una tale grammatica LL (1))? - Sto solo cercando di confermare nella mia testa. –
@pst, sì, è sufficiente che ci sia una grammatica LL (1). –
La tua domanda qual è la differenza tra grammatica e lingua? –