Estoy buscando una definición clara de lo que son "tokenizer", "parser" y "lexer" y cómo se relacionan entre sí (por ejemplo, ¿un analizador utiliza un tokenizer o viceversa)? Necesito crear un programa que vaya a través de archivos fuente c / h para extraer la declaración de datos y las definiciones.
He estado buscando ejemplos y puedo encontrar información, pero realmente me cuesta entender los conceptos subyacentes como las reglas gramaticales, los árboles de análisis y el árbol de sintaxis abstracta y cómo se interrelacionan entre sí. Finalmente, estos conceptos deben almacenarse en un programa real, pero 1) cómo se ven, 2) hay implementaciones comunes.
He estado buscando en Wikipedia sobre estos temas y programas como Lex y Yacc, pero nunca he asistido a una clase de compilador (EE mayor). Me resulta difícil entender completamente lo que está sucediendo.