Grammatiche regolari e libere dal contesto


96

Sto studiando per il mio test sui linguaggi informatici e c'è un'idea che sto avendo problemi a capire.

Ho capito che le grammatiche regolari sono più semplici e non possono contenere ambiguità, ma non possono svolgere molte attività richieste per i linguaggi di programmazione. Ho anche capito che le grammatiche prive di contesto consentono ambiguità, ma consentono alcune cose necessarie per i linguaggi di programmazione (come i palindromi).

Quello con cui ho problemi è capire come posso derivare tutto quanto sopra sapendo che i normali non terminali di grammatica possono mappare un terminale o un non terminale seguito da un terminale o che un non terminale senza contesto mappa a qualsiasi combinazione di terminali e non terminali .

Qualcuno può aiutarmi a mettere insieme tutto questo?

Risposte:


70

La grammatica regolare è lineare destra o sinistra, mentre la grammatica libera dal contesto è fondamentalmente una qualsiasi combinazione di terminali e non terminali. Quindi puoi vedere che la grammatica regolare è un sottoinsieme della grammatica libera dal contesto.

Quindi per un palindromo, ad esempio, è della forma,

S->ABA
A->something
B->something

Puoi vedere chiaramente che i palindromi non possono essere espressi nella grammatica regolare poiché deve essere lineare destro o sinistro e come tale non può avere un non terminale su entrambi i lati.

Poiché le grammatiche regolari non sono ambigue, esiste solo una regola di produzione per un dato non terminale, mentre può essercene più di una nel caso di una grammatica libera dal contesto.


13
Primo: le grammatiche regolari possono essere ambigue (esempio da Kai Kuchenbecker: S -> aA | aB, B -> a, A -> a). L'unica cosa è che esiste un solo modo in cui i nodi nell'albero della sintassi possono essere posizionati (ad esempio l'ambiguità dell'associatività non esiste quando viene utilizzata una grammatica regolare). Secondo: può esserci più di un lato destro di un non terminale (A -> a, A -> aA; e wikipedia include anche epsilon come terza alternativa: en.wikipedia.org/wiki/Regular_grammar )
user764754

1
l'ambiguità si verifica quando una frase può essere derivata dalla tua grammatica in più di un percorso di derivazione. il semplice fatto di avere più di una regola di produzione per un non terminale non rende ambigua la grammatica
Sujoy

11
Questo esempio è effettivamente sbagliato. Se immaginiamo che le regole siano complete A-> a | ce B->bquindi questa grammatica consente i non palindromi. Ad esempio, potrei produrre: S->ABA->aBA->abA->abc. Il problema è che non vogliamo produrre due variabili nella prima regola, ma piuttosto due terminali. Una possibilità per una grammatica che consente i palindromi è:S -> aSa | bSb | a | b
gdiazc

Ci sono palindromi che possono essere espressi in una grammatica regolare: i palindromi che consistono in un singolo carattere. Ad esempio, S -> aSa | ee a(aa)*asia descrivono un linguaggio regolare. Ciò dimostra che un CFG può descrivere un linguaggio normale, anche se viola la linearità sinistra o destra. Certo, questo è un palindromo non così ovvio ..
Martijn

A pensarci bene, questa risposta è effettivamente sbagliata. Dice che la grammatica "libera dal contesto" è fondamentalmente qualsiasi combinazione di terminali e non terminali. "Tuttavia, tu ^ nvw ^ mxy ^ kz è una combinazione di terminali e non terminali, ma non priva di contesto.
Charlie Martin,

58

Penso che quello a cui vuoi pensare siano i vari lemmi di pompaggio. Un linguaggio normale può essere riconosciuto da un automa finito. Un linguaggio senza contesto richiede uno stack e un linguaggio sensibile al contesto richiede due stack (il che equivale a dire che richiede una macchina di Turing completa).

Quindi, se si pensa al lemma di pompaggio per linguaggi regolari , quello che dice, in sostanza, è che ogni linguaggio regolare può essere suddiviso in tre parti, x , y , e z , in cui tutte le istanze del linguaggio sono in xy * z (dove * è la ripetizione di Kleene, cioè 0 o più copie di y .) Fondamentalmente hai un "non terminale" che può essere espanso.

Ora, che dire delle lingue prive di contesto? Esiste un analogo lemma di pompaggio per linguaggi privi di contesto che rompe le stringhe nella lingua in cinque parti, uvxyz , e dove tutte le istanze della lingua sono in uv i xy i z , per i ≥ 0. Ora, hai due "non terminali "che può essere replicato o pompato, purché si abbia lo stesso numero .


10
Un linguaggio sensibile al contesto non richiede una macchina di Turing completa. Un automa lineare limitato è sufficiente. Questa è una macchina di Turing il cui nastro è finito, la dimensione è delimitata da una funzione lineare sulla stringa di input.
Dave Clarke

16

La differenza tra grammatica regolare e libera dal contesto: (N, Σ, P, S): terminali, non terminali, produzioni, stato iniziale Simboli terminali

● simboli elementari del linguaggio definiti da una grammatica formale

● abc

Simboli non terminali (o variabili sintattiche)

● sostituito da gruppi di simboli terminali secondo le regole di produzione

● ABC

grammatica regolare: grammatica regolare destra o sinistra grammatica regolare destra, tutte le regole obbediscono alle forme

  1. B → a dove B è un non terminale in N e a è un terminale in Σ
  2. B → aC dove B e C sono in N e a è in Σ
  3. B → ε dove B è in N e ε indica la stringa vuota, cioè la stringa di lunghezza 0

lasciata la grammatica regolare, tutte le regole obbediscono alle forme

  1. A → a dove A è un non terminale in N e a è un terminale in Σ
  2. A → Ba dove A e B sono in N e a è in Σ
  3. A → ε dove A è in N e ε è la stringa vuota

grammatica libera dal contesto (CFG)

○ grammatica formale in cui ogni regola di produzione è della forma V → w

○ V è un singolo simbolo non terminale

○ w è una stringa di terminali e / o non terminali (w può essere vuoto)


5

Grammatica regolare: - la grammatica contenente la produzione come segue è RG:

V->TV or VT
V->T

dove V = variabile e T = terminale

RG può essere Grammatica lineare sinistra o Grammatica lineare destra, ma non Grammatica lineare media.

Come sappiamo tutti gli RG sono Grammatica lineare ma solo la Grammatica lineare sinistra o la Grammatica lineare destra sono RG.

Una grammatica regolare può essere ambigua.

S->aA|aB
A->a
B->a

Grammatica ambigua: - per una stringa x esistono più di un LMD o più di RMD o più di un albero di analisi o un LMD e un RMD ma entrambi producono un albero di analisi diverso.

                S                   S

              /   \               /   \
             a     A             a     B
                    \                   \
                     a                   a

questa grammatica è una grammatica ambigua perché due alberi di analisi.

CFG: - Una grammatica detta CFG se la sua produzione è in forma:

   V->@   where @ belongs to (V+T)*

DCFL: - come sappiamo tutti i DCFL sono LL (1) Grammatica e tutti LL (1) è LR (1) quindi non è mai ambiguo. quindi DCFG è Mai essere ambiguo.

Sappiamo anche che tutti gli RL sono DCFL, quindi non essere mai ambigui. Nota che RG può essere ambiguo ma RL no.

CFL: CFl Può o non può ambiguo.

Nota: RL non è mai intrinsecamente ambiguo.


4

Espressioni regolari

  • Basi dell'analisi lessicale
  • Rappresenta le lingue regolari

Grammatiche libere dal contesto

  • Base di analisi
  • Rappresenta i costrutti del linguaggio

inserisci qui la descrizione dell'immagine


No, questa è una breve descrizione, per favore rileggi e controlla l'immagine.
Ahmed Salem,

3

Una grammatica è priva di contesto se tutte le regole di produzione hanno la forma: A (ovvero, il lato sinistro di una regola può essere solo una singola variabile; il lato destro è illimitato e può essere qualsiasi sequenza di terminali e variabili). Possiamo definire una grammatica come una 4-tupla dove V è un insieme finito (variabili), _ è un insieme finito (terminali), S è la variabile iniziale e R è un insieme finito di regole, ognuna delle quali è una mappatura La
grammatica regolare V può essere lineare destra o sinistra, mentre la grammatica libera dal contesto è fondamentalmente qualsiasi combinazione di terminali e non terminali. quindi possiamo dire che la grammatica regolare è un sottoinsieme della grammatica libera dal contesto. Dopo queste proprietà possiamo dire che il set Context Free Languages ​​contiene anche il set Regular Languages


-1

Fondamentalmente la grammatica regolare è un sottoinsieme della grammatica libera dal contesto, ma non possiamo dire che ogni grammatica libera dal contesto sia una grammatica regolare. Principalmente la grammatica libera dal contesto è ambigua e la grammatica regolare può essere ambigua.


-4

un grammatico regolare non è mai ambiguo perché è lineare a sinistra o lineare a destra, quindi non possiamo prendere due alberi decisionali per il grammatico regolare quindi è sempre univoco, ma a parte la grammatica regolare tutti possono o non possono essere regolari


4
@dinesh Una grammatica regolare può essere ambigua. Ricorda che una grammatica è ambigua se esistono due diversi alberi di sintassi e che un albero di sintassi è etichettato. Quindi gli alberi isomorfi sono alberi diversi. Cioè una grammatica semplice come S -> aA | aB, B -> a, A -> a è ambiguo poiché esistono due alberi di sintassi per la parola 'aa' che sono isomorfi ma differenti.
Kai Kuchenbecker
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.