L'importanza di forme normali come la forma normale di Chomsky per i CFG


12

Comprendo che le grammatiche senza contesto possono essere utilizzate per rappresentare linguaggi senza contesto e potrebbe avere ambiguità. Abbiamo anche forme normali come Chomsky e Greibach forma normale. Non riuscivo a capirne la necessità.

Perché sono importanti nella teoria delle lingue? Tutti i libri di testo a cui ho fatto riferimento parlano di queste forme normali ma non raccontano nulla della loro importanza.


2
Le forme normali sono utili quando si danno prove costruttive.
Karolis Juodelė,

Risposte:


12

Vi sono almeno due usi pertinenti.

  1. Semplicità delle prove
    Ci sono molte prove intorno a grammatiche senza contesto, inclusa la riducibilità e l'equivalenza agli automi. Questi sono i più semplici e più limitato è l'insieme di grammatiche che devi affrontare. Pertanto, le forme normali possono essere utili lì.

    εε

  2. Abilita l'analisi
    Sebbene i PDA possano essere utilizzati per analizzare le parole con qualsiasi grammatica, ciò è spesso scomodo. I moduli normali possono darci più struttura su cui lavorare, risultando in algoritmi di analisi più facili.

    Come esempio concreto, l' algoritmo CYK utilizza la forma normale di Chomsky. La forma normale di Greibach, d'altra parte, consente l'analisi della discesa ricorsiva; anche se può essere necessario il backtracking, la complessità dello spazio è lineare.


5

La forma normale di Chomsky consente a un algoritmo di tempo polinomiale di decidere se una stringa può essere generata da una grammatica. L'algoritmo è piuttosto fluido se conosci la programmazione dinamica ...

InAnn

A[i,j]GI(i,j)

A[1,n]SS

def decide (string s,grammar G):
    //base case
    for i=1 to n:
        N[i,i]=I[i]    //as the substring of length one can be generated by only a
                       terminal.
    //end base case

    //induction
    for s=1 to n:       //length of substring
        for i=1 to n-s-1: //start index of substring
            for j=i to i+s-1:   //something else
                 if there exists a rule A->BC such that B belongs to N[i,j] and C
                 belongs to N[j+1,i+s-1] then add A to N[i,i+s-1]
    //endInduction

    if S belongs to N[1,n] then accept else reject.

So che gli indici sembrano piuttosto pazzi. Ma fondamentalmente ecco cosa sta succedendo.

  • Il caso di base è abbastanza chiaro, penso.

  • ss

  • 5sub1A>BCBCAN[1,6]

  • N[1,n]


  • 3
    Questo è l'algoritmo CYK che a) dovresti nominare come tale eb) è stato menzionato nella mia risposta. Si noti che il runtime polinomiale è impressionante solo perché l'algoritmo è uniforme su tutti i CFG, ovvero è generale.
    Raffaello

    @Raphael ok .... non conoscevo il nome :)
    ishan3243 il

    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.