Forma normale di Chomsky

Nella teoria dei linguaggi formali, una grammatica libera dal contesto si dice essere nella forma normale di Chomsky (CNF,[1] o FNC, dall'inglese Chomsky normal form) (scoperta da Noam Chomsky)[2] se tutte le sue regole di produzione sono nella forma seguente:[1][3]

A B C {\displaystyle A\rightarrow BC} o
A a {\displaystyle A\rightarrow a} o
S ε {\displaystyle S\rightarrow \varepsilon } ,

dove A {\displaystyle A} , B {\displaystyle B} e C {\displaystyle C} sono simboli non terminali, a {\displaystyle a} è un simbolo terminale (un simbolo che rappresenta un valore costante), S {\displaystyle S} è l'assioma di partenza, ε {\displaystyle \varepsilon } è la stringa vuota, e B S C S {\displaystyle B\neq S\land C\neq S} .

Tutte le grammatiche nella forma normale di Chomsky sono non contestuali e, viceversa, tutte le grammatiche non contestuali possono essere trasformate in grammatiche equivalenti in FNC. Per eseguire tale trasformazione sono stati ideati più algoritmi. Tuttavia, come fatto notare da Lange e Leiß,[4] lo svantaggio di queste trasformazioni sta nel grande aumento della dimensione della grammatica, dove tale dimensione equivale alla somma delle dimensioni delle regole di produzione, le quali, a loro volta, equivalgono a 1 più la lunghezza della parte destra. Denotando con | G | {\displaystyle |G|} la dimensione della grammatica originale G {\displaystyle G} , la crescita di tale dimensione nel peggiore dei casi è compresa fra | G | 2 {\displaystyle |G|^{2}} a 2 2 | G | {\displaystyle 2^{2|G|}} (dipende dall'algoritmo di trasformazione utilizzato).

Definizione alternativa

Forma ridotta di Chomsky

Un altro modo per definire la forma normale di Chomsky normal form è:

Una grammatica formale è in forma ridotta di Chomsky se tutte le sue regole di produzione sono nella forma seguente:

A B C {\displaystyle A\rightarrow \,BC} o
A a {\displaystyle A\rightarrow \,a} ,

dove A {\displaystyle A} , B {\displaystyle B} e C {\displaystyle C} sono simboli non terminali e a {\displaystyle a} è un simbolo terminale. Solo le grammatiche context-free che non ammettono epsilon-produzioni possono essere rese in questa forma.

Forma normale di Floyd

In un articolo in cui propose la Backus-Naur Form (BNF), Donald E. Knuth suggerì una «sintassi [BNF] in cui tutte le definizioni aventi tale forma sono dette essere in "forma normale di Floyd"»:

A ::= B C {\displaystyle \langle A\rangle ::=\,\langle B\rangle \mid \langle C\rangle } o
A ::= B C {\displaystyle \langle A\rangle ::=\,\langle B\rangle \langle C\rangle } o
A ::= a {\displaystyle \langle A\rangle ::=\,a} ,

dove A {\displaystyle \langle A\rangle } , B {\displaystyle \langle B\rangle } e C {\displaystyle \langle C\rangle } sono simboli non terminali e a {\displaystyle a} è un simbolo terminale. Il nome si riferisce a Robert W. Floyd, che nel 1961 scoprì che ogni sintassi BFN può essere convertita in tale forma.[5]

Convertire una grammatica nella FNC

  1. Introdurre S 0 {\displaystyle S_{0}}
    Introdurre un nuovo simbolo di partenza, S 0 {\displaystyle S_{0}} e una nuova regola S 0 S {\displaystyle S_{0}\rightarrow S} , dove S {\displaystyle S} è il precedente assioma.
  2. Eliminare tutte le ε {\displaystyle \varepsilon } -produzioni
    Le ε {\displaystyle \varepsilon } -produzioni sono regole della forma A ε {\displaystyle A\rightarrow \varepsilon } , dove A S 0 {\displaystyle A\not =S_{0}} e A V {\displaystyle A\in V} e V {\displaystyle V} è l'alfabeto delle variabili della grammatica CF.
    Rimuovere ogni regola con ε {\displaystyle \varepsilon } alla propria destra. Per ogni regola con A {\displaystyle A} alla propria destra, aggiungere un insieme di nuove regole consistente delle possibili combinazioni di A {\displaystyle A} sostituito o meno da ε {\displaystyle \varepsilon } . Per esempio, esaminando la seguente grammatica G {\displaystyle G} :
    S A b A B {\displaystyle S\rightarrow AbA\mid B}
    B b c {\displaystyle B\rightarrow b\mid c}
    A ε {\displaystyle A\rightarrow \varepsilon }
    G {\displaystyle G} ha una ε {\displaystyle \varepsilon } -produzione. Quando A ε {\displaystyle A\rightarrow \varepsilon } viene rimossa, la grammatica va modificata nella maniera seguente:
    S A b A A b b A b B {\displaystyle S\rightarrow AbA\mid Ab\mid bA\mid b\mid B}
    B b c {\displaystyle B\rightarrow b\mid c}
    Da notare che a partire dalla prima regola ne sono state aggiunte tre nuove ( S A b b A b {\displaystyle S\rightarrow Ab\mid bA\mid b} ), in ciascuna delle quali almeno un simbolo A {\displaystyle A} viene sostituito con ε {\displaystyle \varepsilon } .
  3. Eliminare tutte le regole unitarie
    A B ; A , B V {\displaystyle A\rightarrow B;A,B\in V}
    Dopo aver rimosso le ε {\displaystyle \varepsilon } -produzioni, vanno rimosse tutte le regole unitarie e le regole che nella parte destra non hanno simboli terminali.
    Per rimuovere A B {\displaystyle A\rightarrow B}
    B U {\displaystyle \forall B\rightarrow U} , dove U {\displaystyle U} è una stringa di variabili generiche, aggiungere A U {\displaystyle A\rightarrow U} a meno che non sia una regola unitaria già rimossa.
  4. Sistemare le rimanenti regole di produzione che non sono ancora nella FNC.
    Sostituire A u 1 u 2 u k , k 3 , u 1 V Σ {\displaystyle A\rightarrow u_{1}u_{2}\dotso u_{k},k\geq 3,u_{1}\in V\cup \Sigma } con A u 1 A 1 , A 1 u 2 A 2 , , A k 2 u k 1 u k {\displaystyle A\rightarrow u_{1}A_{1},A_{1}\rightarrow u_{2}A_{2},\dotsc ,A_{k-2}\rightarrow u_{k-1}u_{k}} , dove A i {\displaystyle A_{i}} sono nuove variabili.

Note

  1. ^ a b Ausiello, 2003, p. 128.
  2. ^ (EN) Noam Chomsky, On Certain Formal Properties of Grammars, in Information and Control, vol. 2, 1959, pp. 137–167, DOI:10.1016/S0019-9958(59)90362-6.
  3. ^ Hopcroft, Ullman (1979); Theorem 4.5, sect.4.5, p.92; see also p.106
  4. ^ (EN) Martin Lange, Hans Leiß, To CNF or not to CNF? An Efficient Yet Presentable Version of the CYK Algorithm (PDF), su ddi.cs.uni-potsdam.de, 2009.
  5. ^ Donald E. Knuth. 1964. Backus Normal Form vs. Backus Naur Form. Communications of the ACM, 7(12):735–736, December.

Bibliografia

  • Richard Cole, Converting CFGs to CNF (Chomsky Normal Form) (PDF), Università di New York, 17 ottobre 2007.
  • John E. Hopcroft and Jeffrey D. Ullman, Introduction to Automata Theory, Languages and Computation, Addison-Wesley Publishing, Reading Massachusetts, 1979. ISBN 0-201-02988-X. (See chapter 4.)
  • Daniel Jurafsky e James H. Martin, Speech and Language Processing, 2nd, Pearson Prentice Hall, 2008, ISBN 978-0-13-187321-6.
  • John Martin, Introduction to Languages and the Theory of Computation, McGraw Hill, 2003, ISBN 0-07-232200-4. (Pages 237–240 of section 6.6: simplified forms and normal forms.)
  • Michael Sipser, Introduction to the Theory of Computation, PWS Publishing, 1997, ISBN 0-534-94728-X. (Pages 98–101 of section 2.1: context-free grammars. Page 156.)
  • Giorgio Ausiello, Fabrizio D'Amore, Giorgio Gambosi, Linguaggi modelli complessità, Milano, Franco Angeli Editore, 2003, ISBN 88-464-4470-1.

Voci correlate

  Portale Informatica
  Portale Matematica