BNF regola di analisi per associatività sinistra

0

Qualcuno può aiutarmi con la seguente domanda.

Scrivi una regola BNF per analizzare

C -> E
C -> E && E
C -> E && E && E

in modo che C generi tutti gli E && E necessari e imponga l'associazione a sinistra.

Il seguente è corretto?

C -> C && E | E

Dovrebbe forzare l'associazione a sinistra a causa della ricorsione a sinistra e creare il numero di% di&& E che vuole a causa della ricorsione.

    
posta mylasthope 16.10.2014 - 02:31
fonte

2 risposte

2

A parte alcuni problemi di formattazione ( -> non esiste in BNF formale), la tua regola è corretta. Scritto in sintassi BNF corretta e usando virgolette sui letterali, sarebbe

C ::= C '&&' E | E

La ricorsione a sinistra crea infatti un albero di analisi per un operatore associativo sinistro.

    
risposta data 16.10.2014 - 09:16
fonte
0

Ciò che presenti nella tua domanda è una grammatica context-free (CF) , omettendo dettagli sul terminale (quali simboli sono nel generato testo) e non terminali (quali simboli vengono utilizzati solo per essere riscritti (espanso) e il simbolo iniziale (quale non terminale si avvia con).

BNF (Backus-Naur Form) è una sintassi specifica (stile sintattico) per presentare grammatiche CF, in modo che questa informazione mancante sia visibile solo osservando le regole.

Quindi, scritto in BNF la tua grammatica sarebbe simile a questa:

<C> ::= <C> "&&" <E> | <E>

Il <> è per non-terminali e il "" è per i terminali.

Ma in realtà è solo un frammento di grammatica. Questo è anche chiaramente vero per prima definizione data, anche se non è esplicita.

Il motivo è che E è chiaramente destinato a essere un non-terminale che può derivare ulteriormente in altre espressioni, come (sto indovinando un esempio) %codice%. Ma mancano le regole.

Oltre a questo problema di sintassi, sei perfettamente corretto con la tua risposta, come già ti ha detto Bart van Ingen Schenau.

È molto probabile che il tuo istruttore non distingua BNF e Grammatica CF. Molte persone non lo fanno. Il nome CF grammatica è più usato da teorici, mentre BNF è una notazione comune, vecchia di 50 anni, usata da molti praticanti per l'input da computer ... e molto meno per casual lavoro perché è più lungo da scrivere.

    
risposta data 16.10.2014 - 18:43
fonte

Leggi altre domande sui tag