De hecho, estoy un niño, jaja. Nunca antes escribí un compilador real o diseñé un idioma, pero ya terminé The Red Dragon Book, así que supongo que tengo una idea (espero).
Que dependerá en primer lugar de la gramática. Si es LR o LALR supongo que herramientas como Bison/Flex funcionarían bien. Si es más LL, usaría Spirit, que es un componente de Boost. Le permite escribir la gramática del idioma en C++ en una sintaxis similar al EBNF, por lo que no debe confundirse con los generadores de códigos; el compilador de C++ compila la gramática para usted. Si alguno de estos falla, escribiría una gramática EBNF en papel, y luego procedería a hacer un análisis de descenso recursivo pesado, que parece funcionar; si C++ se puede analizar bastante bien usando RDP (como lo hace GCC), entonces supongo que con suficientes pruebas de unidad y paciencia podrías escribir compiladores enteros usando RDP.
Una vez que tengo un analizador de funcionamiento y algún tipo de representación intermedia, entonces depende de la forma en que se ejecuta. Si es un bytecode o compilador de código nativo, usaré LLVM o libJIT para procesarlo. LLVM es más adecuado para la compilación general, pero me gusta más la API y la documentación de libJIT. Alternativamente, si soy muy flojo, generaré código C y dejaré que GCC realice la compilación. Otra alternativa es apuntar a una VM existente, como Parrot o JVM o CLR. Parrot es la máquina virtual diseñada para Perl. Si solo es un intérprete, caminaré por el árbol de sintaxis.
Una alternativa radical es el uso de Prolog, que tiene características de sintaxis que notablemente simulan EBNF. No tengo experiencia con eso, y si no estoy equivocado (lo que casi con toda seguridad voy a ser), Prolog sería bastante lento si se usa para analizar los lenguajes de programación pesados con muchas construcciones y peculiaridades sintácticas (léase: C++ y Perl).
Todo esto lo haré en C++, aunque sólo sea porque estoy más acostumbrado a escribir en él que C. Me quedaría lejos de Java/Python o algo por el estilo para el código de producción real (compiladores escritura en C/C++ ayuda a hacerlo portátil), pero podría verme usarlos como un lenguaje de creación de prototipos, especialmente Python, que me gusta. Por supuesto, nunca he hecho nada de esto antes, así que no soy uno para decir.
Para que quede constancia, los "niños" todavía usan la línea de comandos y objetan sobre qué caparazón es superior. O lo hago al menos. C está muerto. Debo huir de la acaparamiento de los programadores C, ¡así que nos veremos! –
¿Qué tipo de lenguaje, interpretado o compilado? –
interpretado o compilado? Hmmm buena pregunta. Asumiré que hace una diferencia, por lo que voy a decir ambas cosas para estar seguro. – Mike