2012-02-23 18 views
8

Esiste un codice parser o un componente parser per Delphi o un programma che accetta la notazione BNF (Backus-Naur Form) come input e produce il codice Delphi (o pascal) fare l'analisi?Produce codice Delphi che analizza un file con un dato formato BNF

La ragione di questo è che ho intenzione di essere il tentativo di analizzare perfettamente i set di dati seguenti varie versioni di the GEDCOM standard (utilizzati per la genealogia), e sarà necessario elaborare il file da stato a stato, come si raggiungono i token. Preferirei un programma automatico per eseguire il lavoro di configurazione del codice pascal di base per eseguire lo stato da elaborare.

Altrimenti, dovrò manualmente creare manualmente le strutture dello stato.

ho visto la seguente domanda (e TinyPG sembra buono, ma ho bisogno di codice Delphi): Parser-generator that outputs C# given a BNF grammar?

Se non c'è una bestia, ci sono altri strumenti disponibili che renderanno questo compito più facile ?

risposta

6

Vi consiglio il sistema di analisi GOLD. Le grammatiche GOLD sono basate sulla forma di Backus-Naur e sulle espressioni regolari.

Risorse

Motori

Engine s per Delphi sono elencati in particolare here.

Questo one per Object Pascal di Rob van den Brink potrebbe essere di interesse.

Citazione:

Rob van den Brink ha aggiornato il suo motore per l'Object Pascal Programmazione lingua. La sua implementazione utilizza un modello di programma per creare un programma completo . Questo approccio incorpora le tabelle di analisi direttamente nel codice sorgente. Di conseguenza, non è necessario caricare un file tabella grammatica compilata . Il download contiene un modello di programma e diversi esempi.

progetto di esempio utilizzando ORO

GOLD è potente, è utilizzato come motore di analisi di dcu2pas, un decompilatore Delphi Compiled Unit (file DCU) che è ospitato here (bitbucket.org). Si noti invece che è scritto in .

+1

Mi piace molto il sistema di analisi GOLD, in particolare l'editor e il debugger. Sfortunatamente l'implementazione del motore Delphi ha dieci anni, il file Readme.txt per "Rob van den Brink" dice "24 aprile 2002". Precede Delphi Unicode di ben 7 anni. –

+0

Sì, stanno invecchiando ma possono essere migliorati. Le recenti implementazioni del motore C# utilizzano il costrutto del bordo sanguinante. Il motore D (Digital Mars D) di Matthias Piepkorn è ispirato a quei motori Delphi e lo trovo davvero eccellente. È giunto il momento che la comunità Delphi riprenda il meglio e si metta in ginocchio per tenere il passo. – menjaraz

+1

Questo sembra esattamente lo strumento che speravo di trovare. Grazie per averlo precisato! – lkessler