Sono in fase di pianificazione della creazione di un abbellitore di codice (simile a AStyle o Uncrustify ) - originariamente stavo per contribuire a uno di quei progetti,
ma rivedere la loro fonte mi ha portato alla conclusione che ho diversi obiettivi di progettazione e che la loro fonte è scritta in un modo che rende difficile per un outsider di contribuire facilmente. Ad esempio, AStyle, invece di costruire una sorta di AST, usa oltre 100 variabili di stato come isInComment
, foundClassHeader
, isLineReady
, ecc.
Decido tra l'uso di scanner e generatori di parser (come flex e bison) e scrivere il mio sistema di analisi. Quale sarebbe un approccio migliore? Ho frequentato un corso di compilatore in università, quindi ho una certa esperienza con la scansione e la teoria del parsing. Di seguito sono riportati i vantaggi per cui ho pensato:
Generatori
- Probabilmente più semplice / veloce da sviluppare
- Probabilmente più ottimizzato del mio attacco iniziale a un parser personalizzato, sebbene uno personalizzato potrebbe lasciare più margine di miglioramento
Analizzatore personalizzato
- Probabilmente è più facile eseguire il debug di
- I programmatori sembrano preferire i lexer e parser personalizzati nelle domande precedenti - "Chiunque voglia un lessico decente non lo fa" t utilizzare Lex "
- Meno dipendenze
- Potrebbe consentire un parsing "più sfumato" - poiché sto solo sviluppando un beautifier, il parser non avrebbe bisogno di essere altrettanto severo o dettagliato di uno per un compilatore
- Parallelizzazione: flex e bisonte (o quello che ho visto di loro) usano lo stato globale. Se voglio analizzare più file contemporaneamente (in thread separati), una soluzione personalizzata sarebbe più semplice da compartimentare