¿Qué materias de informática se requieren para seguir el curso introductorio en compiladores? [cerrado]

10

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.

estrés_geek
fuente
1
Depende de tu escuela. El mío no fue tan difícil, por lo que los requisitos previos eran estructuras de datos básicas y algoritmos básicos, eso es todo. Desafortunadamente, hicieron que los compiladores fueran opcionales y yo me desanimé y no lo tomé.
Trabajo

Respuestas:

8

Probablemente debería tener una comprensión simple de los siguientes temas:

  • Matemática discreta (conjuntos, relaciones, árboles, gráficos, matrices, teoría de números)
  • Estructuras de datos (en un sentido más aplicado, cómo funcionan los árboles, listas, pilas, colas y cadenas)
  • Algoritmos básicos (conceptos básicos, clasificación, búsqueda, notación Big-O, etc.)
  • Arquitectura de la computadora (lógica digital, operaciones de bits, microcomponentes, caché, memoria, programación de ensamblaje)
  • Varios (expresiones regulares, lenguajes sin contexto, autómatas de estado finito / pushdown, máquinas de Turing y computabilidad, herramientas léxicas y de análisis)

Opcional, y probablemente ayudará mucho:

  • Diseño del sistema operativo (gestión de procesos, diseño de kernel, sincronización, programación, eventos, bloqueos, subprocesos y pila vs montón)
Pewpewarrows
fuente
4

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.

Mason Wheeler
fuente
3

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.

Peter Smith
fuente
1
Esto solo es cierto si suponemos que el compilador en cuestión está generando código de máquina y no algún tipo de código de bytes.
Mason Wheeler
3

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.

John Bode
fuente
2

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.

Mark Pauley
fuente
0

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.

Gran maestro B
fuente
0

Depende de su unidad, pero la mayoría requiere estos requisitos previos:

=> Discrete Mathematics
Should include: propositional logic, predicate logic, set theory etc etc 

=> General Concepts of Programming (In any language of choice would be okay)
=> Algorithms and Data Structures
Should include: data structures, abstract data types, recursive algorithms
rrazd
fuente