Perché BNF è considerata una tecnica insoddisfacente per descrivere una lingua?


8

L'altro giorno stavo leggendo l'articolo Concetti fondamentali in Linguaggi di programmazione di C. Strachey , in cui leggevo qualcosa che mi era abbastanza strano. Citando direttamente (con la strana parte evidenziata da me):

Di fronte alla situazione come esiste oggi, dove v'è un metodo noto di descrivere una certa classe di grammatiche (noto come BNF o context-free), il primo istinto di questi matematici sembra essere quello di indagare i limiti della BNF -che puoi esprimere in BNF anche a costo di costruzioni ingombranti e artificiali? Questa potrebbe essere una domanda di un certo interesse matematico (qualunque cosa significhi), ma ha poca rilevanza per i linguaggi di programmazione in cui è più importante scoprire metodi migliori per descrivere la sintassi rispetto a BNF (che è già sia scomodo che inadeguato per ALGOL) piuttosto che esaminare i possibili limiti di ciò che già sappiamo essere una tecnica insoddisfacente .

C'è un motivo specifico per cui l'autore considera il BNF una tecnica insoddisfacente per descrivere le lingue? Potrebbe essere perché puoi descrivere solo la sintassi e non la semantica con una singola grammatica BNF (tuttavia, puoi estenderla per descrivere la semantica operativa trasformandola in una grammatica degli attributi)?


Risposte:


3

Hai citato un motivo.

L'altro motivo è che la sintassi dei linguaggi di programmazione non è senza contesto, a meno che non si definisca la sintassi come quella che può essere o è descritta da una grammatica senza contesto.

Quando è stato scritto il documento di Strachey, la sintassi di una nuova lingua, Algol 68, veniva definita in un nuovo formalismo, grammatiche a due livelli, che è stato usato per descrivere la validità sintattica in pieno, comprese molte cose che, sotto il lavaggio del cervello del "BNF è il meme della sintassi, molti di noi non considerano affatto parte della sintassi, come tutte le variabili che devono essere dichiarate prima dell'uso.

La maggior parte di noi non andrà così lontano, ma sarà comunque d'accordo sull'esistenza di funzionalità sintattiche senza contesto nei linguaggi di programmazione.


3

Non penso che la semantica abbia un ruolo. Il tuo preventivo chiede "scopri metodi migliori per descrivere la sintassi di BNF". Naturalmente, cose come la funzione e i nomi delle variabili fanno parte della sintassi. Con BNF, ad esempio, non è possibile distinguere una lingua in cui le variabili devono essere decalizzate prima dell'uso da una in cui è possibile utilizzare variabili non dichiarate. Queste cose devono essere spiegate di solito nel testo di accompagnamento, che non è perfetto.


"Di solito queste cose devono essere spiegate nel testo di accompagnamento", tuttavia ci sono semantiche formali.
Raffaello

1
La domanda se un programma con un determinato identificatore in una determinata posizione è legale per me o no è la sintassi, non la semantica. Semantica è il significato, la sintassi sta descrivendo il linguaggio formale dei programmi legali. Quindi penso che il mio esempio descriva una parte della sintassi solitamente descritta in forma di testo.
Peter Leupold,

1
A parte la terminologia del linguaggio di programmazione, il ramo di TCS chiamato semantica formale è ciò che puoi usare lì. Puoi chiamare la sintassi in seguito, se lo desideri (anche se lo considererei stupido); il punto è che il linguaggio naturale non è l'unica alternativa per specificare queste cose.
Raffaello
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.