No soy estudiante de informática y trabajo como desarrollador web (java, python, AS3, etc.) como profesional. Tomo 1 curso por semestre en mi universidad local. Había tomado Inteligencia Artificial (que comprende lógica, gramática libre de contexto, análisis CYK, PNL introductorio, cadenas de markov, HMM, etc.) el semestre pasado.
Estoy planeando tomar un curso introductorio en compiladores en el próximo semestre que cubra el siguiente programa de estudios:
Análisis léxico, análisis de sintaxis, análisis semántico, entorno de tiempo de ejecución, representaciones intermedias, generación de código, asignación de registros, selección y programación de instrucciones, introducción a optimizaciones de código locales y globales, análisis de flujo de datos
Mi pregunta es: ¿hay alguna asignatura de ciencias de la computación que deba saber antes de tomar este curso? En caso afirmativo, sería genial si pudiera enumerar esos cursos.
fuente
Respuestas:
Probablemente debería tener una comprensión simple de los siguientes temas:
Opcional, y probablemente ayudará mucho:
fuente
Bueno, he trabajado un poco escribiendo mis propios compiladores, y diría que el requisito previo principal es una comprensión sólida de las cosas que obtendrá en una clase de Estructuras de datos. Específicamente, si no comprende la recursividad, los árboles y los mapas / tablas hash, se perderá muy rápidamente tratando de aprender a construir un compilador.
fuente
Necesitará información básica sobre la arquitectura de la computadora (registros, memoria, registros de propósito especial, etc.) y ha visto un código de ensamblaje antes. Sería aún mejor si ha escrito algún código de ensamblaje antes, por lo que tiene una comprensión justa de cómo funciona el lenguaje de máquina.
Dependiendo del nivel del curso, es de esperar que conozca un poco sobre el procesamiento superescalar y similares.
fuente
Si esto se parece en algo a la clase de compiladores que tomé a fines del Cretácico (ca. 1988), los únicos requisitos previos reales serían estructuras de datos (árboles y tablas hash especialmente), algún lenguaje ensamblador (para el código generado), posiblemente algo de arquitectura de computadora, y cualquier clase que enseñe cosas como expresiones regulares, autómatas finitos, máquinas de Turing, etc., aunque pueden cubrirse como parte del curso del compilador (FWIW, el mío no). También querrás asegurarte de entender la recursividad.
fuente
Probablemente también necesite tomar un curso sobre modelos formales e idiomas. Cualquier cosa que cubra la jerarquía básica de Chompsky estaría bien: idiomas regulares + idiomas libres de contexto. Esto se debe a que es importante comprender los fundamentos matemáticos del análisis para que su analizador sea limpio, eficaz y correcto. Creo que una buena clase de compiladores a menudo cubrirá tanto Expresiones regulares como analizadores LALR / LL (k) y la teoría detrás de ellos.
fuente
Como están hablando de la optimización del código, es posible que haya algo de codificación de lenguaje de ensamblaje allí. Por lo tanto, podría ser bueno tener una familiaridad pasajera con eso al menos. Dependería de cómo esté estructurado ese curso específico. De lo contrario, solo tener un sólido conjunto de habilidades de programación debería ser suficiente para una introducción a la clase de compiladores, creo. Será una clase muy valiosa.
fuente
Depende de su unidad, pero la mayoría requiere estos requisitos previos:
fuente