¿Cómo aprender a programar? ¿Cómo aprenden a programar los principiantes?
Cuando empiezas a aprender un lenguaje de programación, ¿qué debes hacer? Escribir un compilador y aprender métodos de programación de nivel inferior es una forma muy eficaz de aprender cómo funcionan las computadoras. Los compiladores suelen considerarse proyectos muy complejos. De hecho, escribir un compilador a nivel de producción es una tarea enorme. Pero escribir un compilador pequeño y utilizable no es tan difícil.
El secreto es presentar primero el tutorial introductorio a la programación, encontrar el proyecto más pequeño posible y luego agregar las funciones deseadas. Este enfoque también significa lo que dijo Abdulaziz Ghuloum en su famoso artículo "un atajo construido por un compilador". Pero este método funciona. Simplemente siga el primer paso de este artículo para obtener un compilador verdaderamente utilizable. Por supuesto, sólo se puede compilar para un subconjunto muy pequeño de lenguajes de programación, pero tiene un compilador real disponible. Eres libre de ampliar este compilador, aprender más y profundizar.
En cierto sentido, esto es más difícil que escribir un compilador de esquemas (porque hay que analizar la compleja sintaxis de C), pero en algunos aspectos es muy conveniente (no es necesario lidiar con tipo de tiempo de ejecución). Para escribir un compilador de este tipo, simplemente comience con el compilador más pequeño disponible. No hay variables, ni llamadas a funciones, ni dependencias adicionales, ni siquiera declaraciones o declaraciones de bucle. Todo parece tan simple.
Después de dar el primer paso en el tutorial introductorio a la programación, lo que hagas a continuación depende totalmente de ti. Puede hacer todo como se indica en el artículo y luego crear un compilador más complejo. Es necesario escribir un árbol de sintaxis más elaborado para generar código ensamblador. Los siguientes pasos son: (1) permitir la devolución de valores arbitrarios (por ejemplo, return3; algún código ejecutable); (2) agregar soporte para "no" (por ejemplo, return ~1; algún código ejecutable). Cada característica adicional le enseña más sobre el lenguaje C, cómo funciona realmente el compilador y qué piensan otras personas en el mundo que escriben compiladores. Aquí se explica cómo construir babyc. Babyc ahora tiene sentencias if, bucles, variables y las estructuras de datos más básicas.