Personalmente preferisco Parsec con l'aiuto di Alex per lexing.
Preferisco Parsec su Happy perché 1) Parsec è una libreria, mentre Happy è un programma e si scriverà in una lingua diversa se si utilizza Happy e quindi si compila con Happy. 2) Parsec offre capacità di analisi sensibile al contesto grazie alla sua interfaccia monadica. È possibile utilizzare lo stato extra per l'analisi sensibile al contesto, quindi ispezionare e decidere in base a tale stato. Oppure guarda solo qualche valore analizzato prima e decidi i prossimi parser ecc. (Come a <- parseSomething; if test a then ... do ...
) E quando non hai bisogno di informazioni sensibili al contesto, puoi semplicemente usare lo stile applicativo e ottenere un'implementazione come implementata in YACC o uno strumento simile .
Come un aspetto negativo di Parsec, non saprai mai se il parser Parsec contiene una ricorsione a sinistra, e il parser otterrà bloccato in fase di esecuzione (in quanto Parsec è fondamentalmente un parser top-down ricorsivo-discesa). Devi trovare le ricadute a sinistra ed eliminarle. I parser in stile YACC possono darti alcune garanzie statiche e informazioni (come lo spostamento/riduzione dei conflitti, i terminali inutilizzati, ecc.) Che non puoi ottenere con Parsec.
Alex è altamente raccomandato per lexing in entrambe le situazioni (
penso che
deve uso Alex se si decide di andare avanti con Felice
). Perché anche se usi Parsec, semplifica davvero l'implementazione del parser e cattura anche una grande quantità di bug (ad esempio: analizzare una parola chiave come identificatore era un errore comune che facevo mentre stavo usando Parsec senza Alex: è solo un esempio).
È possibile dare un'occhiata al mio Lua parser implementato in Alex + Parsec ed ecco lo code to use Alex-generated tokens in Parsec.
MODIFICA: Grazie John L
per le correzioni. A quanto pare puoi anche fare un parsing sensibile al contesto con Happy. Inoltre, Alex per lexing non è richiesto in Happy, anche se è raccomandato.
Questo è un progetto enorme. Un parser di Verilog è molto complicato. –
Sì, davvero. Supportare parte del verilog è abbastanza buono da mostrare che desidero fare con verilog durante il mio dottorato. ma voglio continuare anche dopo il mio dottorato. Quindi è un investimento davvero a lungo termine. Vorrei sapere se Haskell si adatta al conto. Amo questa lingua. – Dilawar
Quindi, cosa hai fatto alla fine? Sei felice della tua scelta? – Schiavini