Perché GCC è passato da Bison a un parser di discesa ricorsivo per C ++ e C?

9

C'è stato un cambio di lingua che lo richiedeva o qualche ragione pratica per cui Bison non era più appropriato o ottimale?

Ho visto su wikipedia che sono passati, facendo riferimento a GCC 3.4 e GCC 4.1 versione note.

Questo stato delle note di rilascio:

A hand-written recursive-descent C++ parser has replaced the YACC-derived C++ parser from previous GCC releases. The new parser contains much improved infrastructure needed for better parsing of C++ source codes, handling of extensions, and clean separation (where possible) between proper semantics analysis and parsing. The new parser fixes many bugs that were found in the old parser.

E

The old Bison-based C and Objective-C parser has been replaced by a new, faster hand-written recursive-descent parser

Quello che vorrei sapere è quali problemi reali stavano avendo e perché era impossibile / non pratico risolvere usando Bison

    
posta neelsg 28.08.2014 - 16:40
fonte

1 risposta

16

GCC è passato all'analisi scritta a mano perché i messaggi di errore sono più significativi quando si usano tecniche di discesa ricorsiva, come ho spiegato qui .

Inoltre, il linguaggio C ++ sta diventando un linguaggio (sintatticamente) complesso per analizzare che l'utilizzo di parser generatori non ne vale la pena.

Finalmente, la maggior parte del lavoro di un compilatore reale non sta analizzando, ma sta ottimizzando. I passaggi di ottimizzazione di middle end GCC sono molto più complessi rispetto alla sua analisi.

(BTW puoi personalizzare GCC ad esempio con plugin o usando MELT , ma non puoi davvero estendere la sintassi della lingua che sta accettando - tranne aggiungendo attributi e direttive).

    
risposta data 28.08.2014 - 17:34
fonte

Leggi altre domande sui tag