Quali vantaggi ci sono nell'usare Flex / Bison semplicemente scrivendo un compilatore direttamente in un linguaggio di programmazione?

3

Ho scritto un interprete / compilatore semplicemente come un algoritmo di programmazione che utilizza funzioni come funzioni ricorsive e concetti di macchine a stati finiti. Per me, queste cose sono ideali per costruire un compilatore (anche se finisce per diventare piuttosto complesso).

Facendo un po 'di ricerca sull'argomento, mi sono imbattuto in Flex / Bison. Mi chiedo come questi strumenti rendono migliore lo sviluppo di un compilatore. È più semplice da usare o il prodotto finale è migliore in qualche modo?

    
posta neelsg 10.11.2014 - 09:12
fonte

1 risposta

4

I generatori di compilatori (come Bison) usano praticamente gli stessi concetti delle macchine a stati finiti che hai usato nel parser fatto a mano.

Le principali differenze tra generatori di compilatori e parser fatti a mano sono

  • Molti parser fatti a mano usano una strategia di analisi top-down, mentre i generatori di compilatori spesso creano un parser bottom-up. Ciò ha un leggero impatto sulle lingue che possono essere supportate, sebbene la maggior parte delle lingue di reale interesse possano essere gestite da entrambi (probabilmente dopo un leggero aggiustamento alle regole grammaticali). Questo ha principalmente a che fare con la ricorsione nella grammatica.
  • Con un generatore di compilatore, si specifica direttamente la grammatica della lingua, in una forma solitamente vicina al modulo BNF comunemente utilizzato per descrivere le grammatiche linguistiche. Con un parser fatto a mano, a volte può essere difficile riconoscere la grammatica della lingua nel codice, che può rendere più difficile la diagnosi di errori derivanti da un'interpretazione errata delle regole del linguaggio.
  • Con un generatore di compilazione, potresti dover imparare una nuova lingua (la lingua accettata dal generatore). I parser fatti a mano possono essere scritti nella maggior parte delle lingue.
risposta data 10.11.2014 - 09:50
fonte

Leggi altre domande sui tag