Indietro

ⓘ Grammatica libera dal contesto




Grammatica libera dal contesto
                                     

ⓘ Grammatica libera dal contesto

In informatica e in linguistica, una grammatica libera dal contesto è una grammatica formale in cui ogni regola sintattica è espressa sotto forma di derivazione di un simbolo a sinistra a partire da uno o più simboli a destra. Ciò può essere espresso con due simbolismi equivalenti:

V = w V → w

dove V è un simbolo non terminale e w è una sequenza di simboli terminali e non terminali. Lespressione "libera dal contesto" si riferisce al fatto che il simbolo non terminale V può sempre essere sostituito da w, indipendentemente dai simboli che lo precedono lo seguono. Un linguaggio formale si dice libero dal contesto se esiste una grammatica libera dal contesto che lo genera.

Nella gerarchia di Chomsky le grammatiche libere dal contesto sono dette di Tipo 2.

Le grammatiche libere dal contesto sono abbastanza potenti da descrivere la sintassi della maggior parte dei linguaggi di programmazione; al tempo stesso, sono abbastanza semplici da consentire un parsing molto efficiente.

La notazione formale di Backus-Naur BNF è la sintassi più comunemente usata per descrivere grammatiche context-free.

Non tutti i linguaggi formali sono liberi dal contesto - un conosciuto controesempio è il seguente { a n b n c n: n ≥ 0 } {\displaystyle \{a^{n}b^{n}c^{n}:n\geq 0\}}.

Questo particolare linguaggio può essere generato da una grammatica di parsing di espressione, un formalismo relativamente nuovo seguito particolarmente dai linguaggi di programmazione.

                                     

1. Definizione formale

Come una grammatica formale, una grammatica context-free G {\displaystyle {\mathcal {G}}} può essere definita come una quadrupla:

G = ⟨ N, Σ, P, S ⟩ {\displaystyle {\mathcal {G}}=\left\langle N,\Sigma,P,S\right\rangle }

dove

  • N {\displaystyle N} è un insieme finito di simboli non terminali
  • gli elementi di P {\displaystyle P} sono nella forma
  • S ∈ N {\displaystyle S\in N} è un elemento di N {\displaystyle N}, il quale determina il simbolo di partenza non terminale
  • P {\displaystyle P} è un insieme finito di regole di produzione o derivazione
  • Σ {\displaystyle \Sigma } è un insieme finito di simboli terminali
N ⟶ Σ ∪ N ∗ {\displaystyle N\longrightarrow \Sigma \cup N^{*}}