2010-01-11 18 views
11

Sto lavorando su una nuova lingua e mentre sto scrivendo la grammatica mi piacerebbe poter testare la grammatica per completezza, conflitti e simili. Io non sono davvero preoccupazione per il generatore di parser underlaying (ma uno per .NET sarebbe preferibile)Qualsiasi IDE BNF con funzionalità di test

Così elenco delle caratteristiche in breve potrebbe essere:

  • funzionalità editor di testo accumulo
  • sintassi/sematics errore segnalazione
  • conflitti di reporting
  • funzionalità test di grammatica (cioè finestra per codice di scrittura nella grammatica previsto per verificare la correttezza della grammatica definizione)

Un progetto CodePlex chiamato Irony ha qualcosa di simile a quello che sto chiedendo ma non supporta la scrittura della grammatica come BNF che è richiesta.

+0

Correlati: http://stackoverflow.com/questions/1800199/is-there-a-bnf-mode-for-emacs – dmckee

risposta

7

Si consiglia ANTLR come generatore di parser. È una funzionalità completa e supporta C# nonché una serie di altre lingue di destinazione.

Per gli IDE, c'è un plug-in per Eclipse chiamato ANTLR IDE e un IDE standalone chiamato ANTLRWorks, entrambi funzionano bene.

Nota, tuttavia, che ANTLR utilizza un algoritmo LL (*) invece di un algoritmo LR (k). Comunque, è molto bello e ANTLRWorks può fare la maggior parte del factoring sinistro necessario.

4

Quando "si lavora su una nuova lingua" e si tenta di ottenere un riferimento BNF corretto, probabilmente non si vuole distorcere la grammatica di riferimento verso alcun particolare generatore di parser. Uno dei problemi con la scrittura di una grammatica di test per Bison (LALR (1)) o ANTLR (LL *) è che fai esattamente questo. Inoltre, non si vuole rimanere bloccati in "come faccio a codificare le regole BNF in modo tale da renderlo effettivamente analizzato" presumibilmente perché si è interessati a lavorare sulla grammatica, non lavorando sul generatore di parser.

Quindi mi consiglia di utilizzare un generatore di parser completo di contesto libero. Questo ti permetterà di scrivere la grammatica nella forma più naturale con il minimo sforzo. Questo potrebbe significare rinunciare a "text editor", "editor test window", ... ma nella mia esperienza (controllare il mio stack overflow bio) utilizzando un generatore di parser privo di contesto sopraffare completamente quelle sottigliezze. Edit-save-parse non richiede molto impegno.

Capisco che Bison ha un'opzione GLR che fornisce generazione di parser senza contesto, ed è open source, e quindi potrebbe essere utile solo per testare la grammatica.

nostro DMS Software Reengineering Toolkit è commerciale e fornisce anche un parser GLR, che è stato utilizzato per attuare alcune 30+ linguaggi completo, compreso C, C++ e COBOL in un certo numero di dialetti e linguaggi più moderni come Python, Ruby, PHP, ....

La differenza tra DMS e Bison è che DMS è progettato per supportare tutti gli aspetti della costruzione di un analizzatore/traduttore linguistico completo (lexing Unicode, analisi GLR con segnalazione degli errori e ripristino, costruzione automatica degli alberi , costruzione di tabelle di simboli, analisi del flusso di dati e di controllo, trasformazioni, prettyprinting, ...). Se volessi valutare seriamente la tua "nuova lingua", alla fine dovrai fare tutte queste cose, e Bison è solo un piccolo passo in questa direzione. DMS ti porterà per tutto il tempo.

+0

Una risposta molto informativa grazie. Sto finendo la fine puntando a uno specifico generatore di parser (fsyacc) parte del compito che ho impostato prima di me stesso è quello di imparare F # e dal momento che dovevo scrivere un compilatore pensavo che sarebbe stato il progetto perfetto per imparare un funzionale linguaggio (anche se f # in senso stretto è multi-paradigma non solo funzionale), quindi non vedo l'ora di fare ciò che il DMS avrebbe altrimenti fornito. fsyacc ius LALR (1) quindi ANTLRworks è solo di poco aiuto alla fine ma completamento automatico e comunque lo rende più veloce di un semplice editor di testo –

0

Dai un'occhiata a BNFC, che può generare codice di lavoro e makefile, da BNF etichettato, per un numero di linguaggi di destinazione come: Haskell, OCaml, C, C++ e Java. Si ottiene una stampante carina, un correttore/stampante sintassi astratta, un codice skeleton per il proprio compilatore o interprete e la documentazione del linguaggio postScript.

0

può essere troverete questo utile strumento: Gold Parser Builder

Unfortunally è solo finestre.