Domanda

Sto lavorando a una nuova lingua e mentre scrivo la grammatica mi piacerebbe essere in grado di testare la grammatica per completezza, conflitti e simili. Non sono davvero preoccupante per il generatore di parser sottovalutato (ma uno per .NET sarebbe preferibile)

Quindi l'elenco delle funzionalità in breve sarebbe:

  • Editor di testo Costruisci funzionalità
  • Reporting Errore di sintassi/Sematica
  • Segnalazione dei conflitti
  • Funzionalità del test grammaticale (cioè finestra per scrivere codice nella grammatica prevista per verificare la correttezza della definizione della grammatica)

Un progetto CodePlex chiamato Irony ha qualcosa di Simlar in ciò che sto chiedendo, ma non supporta la scrittura della grammatica come BNF richiesto.

È stato utile?

Soluzione

io raccomanderei Antlr come generatore di parser. È molto caratteristico completo e supporta C# e una serie di altre lingue target.

Per gli ides, c'è un plugin per Eclipse chiamato Antlr ide e un IDE autonomo chiamato Antlrworks, entrambi i quali funzionano bene.

Si noti, tuttavia, che ANTLR utilizza un algoritmo LL (*) anziché un algoritmo LR (K). Tuttavia, è molto bello e Antlrworks può fare la maggior parte del factoring sinistro necessario.

Altri suggerimenti

Quando "si lavora su una nuova lingua" e cerchi di ottenere un riferimento BNF giusto, probabilmente non si desidera distorcere la grammatica di riferimento verso un particolare generatore di parser. Uno dei problemi con la scrittura di una grammatica di prova per bisonti (lalr (1)) o antlr (ll*) è che fai esattamente questo. Inoltre, non vuoi essere appeso in "Come posso programmare le regole BNF in modo tale da farlo effettivamente analizzare" presumibilmente perché sei interessato a lavorare sulla grammatica, non a lavorare sul generatore di parser.

Quindi consiglierei di utilizzare un generatore di parser gratuito completo. Questo ti permetterà di scrivere la grammatica nella forma più naturale con il minimo sforzo. Ciò potrebbe significare rinunciare a "editor di testo", "Editor Test Window", ... ma nella mia esperienza (controlla la mia biografia di Overflow Stack) usando un generatore di parser senza contesto travolge completamente quelle bellezze. Edit-Save-Parse non richiede molto sforzo.

Comprendo che Bison ha un'opzione GLR che fornirebbe una generazione di parser senza contesto ed è open source, e quindi potrebbe fare solo per il test della grammatica.

Nostro DMS Software Reengineering Toolkit è commerciale e fornisce anche un parser GLR, che è stato utilizzato per implementare circa 30 Langauges completi tra cui C, C ++ e Cobol in numerosi dialetti e lingue più moderne come Python, Ruby, Php, ....

La differenza tra DMS e bisonte è che DMS è progettata per supportare tutti gli aspetti della costruzione di un analizzatore/traduttore di linguaggio (Unicode Lexing, analisi GLR con reporting e recupero degli errori, costruzione di alberi automatici, costruzione della tabella dei simboli, controllo e analisi del flusso di dati , Transformazioni, Prettyprinting, ...). Se volevi valutare seriamente il tuo "nuovo Langauge", alla fine dovrai fare tutte queste cose e Bison è solo un piccolo passo lungo questa strada. DMS ti porterà per tutto il tempo.

Potrebbe essere utile questo strumento: Gold Parser Builder

Purtroppo è solo Windows.

Dai un'occhiata a BNFC, che può generare codice di lavoro e Makefile, da BNF e lassicato, per un numero di lingue target come: Haskell, Ocaml, C, C ++ e Java. Ottieni una stampante piuttosto, checker/stampante di sintassi astratti, codice scheletro per il tuo compilatore o interprete e documentazione di linguaggio poscript.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top