Sto cercando una chiara definizione di cosa sono un "tokenizer", un "parser" e un "lexer" e come sono collegati tra loro (ad esempio, un parser usa un tokenizer o viceversa)? Devo creare un programma che passerà attraverso i file sorgente c / h per estrarre la dichiarazione dei dati e le definizioni.
Ho cercato esempi e posso trovare alcune informazioni, ma sto davvero lottando per afferrare i concetti sottostanti come regole grammaticali, alberi di analisi e albero di sintassi astratto e come si collegano tra loro. Alla fine questi concetti devono essere archiviati in un programma reale, ma 1) come sono, 2) ci sono implementazioni comuni.
Ho esaminato Wikipedia su questi argomenti e programmi come Lex e Yacc, ma non avendo mai seguito una classe di compilatore (EE major), trovo difficile capire appieno cosa sta succedendo.