2010-08-06 17 views
6

Este otoño tomaré varias clases para mis maestros y una de ellas es Diseño y construcción de compiladores. Estoy bastante versado en la mayoría de las cosas relacionadas con la tecnología informática, pero no tengo mucha experiencia con la forma en que los compiladores ensucian, solo las uso cuando lo necesito. Normalmente no estoy nervioso por las clases, pero siento que estoy caminando desnudo. Si alguien puede recomendar algo de buena lectura o proporcionar una breve lista de principios básicos que pueda investigar para actualizarme rápidamente rápidamente Estaría muy agradecido.Diseño del compilador y clase de construcción

ACTUALIZACIÓN:

Bueno, yo grande en la clase, y the text book we used era realmente muy bueno. This site también me ayudó a visualizar y probar mis expresiones regulares (que ahora creo que es lo mejor para dominar al aprender sobre compiladores). Recogí los conceptos básicos de LEX bastante rápido, pero YACC (por alguna razón) fue un poco más difícil para mí. Simplemente buscar ejemplos en línea ayudó con ambos.

+1

Cualquiera de los recursos enumerados en [Aprender a escribir un compilador] (http: // stackoverflow.com/questions/1669/learning-to-write-a-compiler) puede ser útil. Como no dice qué parte de la escritura le preocupa un compilador, es difícil recomendar un recurso específico. –

+0

Gracias por el enlace. Desearía poder ser más específico, pero eso demuestra lo poco que sé sobre los compiladores, y el programa del curso es bastante vago :) – ubiquibacon

+0

+1 para "typoknig". –

Respuesta

3

Compruebe el Dragon Book

+0

Estoy metido en el codo en el primer capítulo y creo que esto es exactamente lo que estaba buscando. Por mi lectura, ya puedo ver que también necesito mejorar mis habilidades de ensamblaje, pero ya me siento mejor con respecto a la clase. ¡Gracias! – ubiquibacon

2

El dragon book suele ser muy recomendable.

+1

No creo que este sea el fondo básico que necesita. Si puede entender el libro del Dragón, no necesita tomar la clase: -} –

+0

Descargando ahora. Aprendo rápido, así que le daré un vistazo de todos modos. – ubiquibacon

+0

@Ira, hay muchas formas de aprender. Aquellos verdaderamente interesados ​​en los temas pueden aprender de los materiales intermedios. Estar emocionado o interesado en algo generalmente significa que quieres aprender sobre eso. Si se encuentra con cosas que no conoce y que no están bien explicadas en su documento, generalmente busca las respuestas. Dicho esto, no hay mucho en ese libro que no sea familiar para cualquiera que esté "bien versado en la mayoría de las cosas relacionadas con la tecnología informática" si eso implica conocimiento y comprensión en informática. – jer

5

Los compiladores son un poco un ejercicio de girar la cabeza. Sin embargo, si tiene una sólida comprensión de las estructuras de datos, los algoritmos y el código ensamblador, y una inclinación para pensar en los detalles, probablemente encontrará la clase fascinante porque es así que diferente de la mayoría del procesamiento de datos comerciales convencionales y/o informática integrada.

Me aseguraría de tener el fondo del código de ensamblado bastante bien. La mayoría de los codificadores de procedimientos no se utilizan para maquinar instrucciones, registros, modos de direcciones y punteros. Si los obtiene, el instructor probablemente explicará el resto bastante bien.

Si no está acostumbrado a los punteros, ejecute , no caminen, al compilador de C más cercano y escriba un montón de programas que los utilicen.

Para algunos antecedentes sobre lo que los compiladores no están, ver Writing compilers ... what's right and what's wrong?

Si quieres un ejercicio muy interesante, se puede aprender sobre MetaII, que es como para construir un compilador que genera un compilador con una increíblemente pequeña cantidad de esfuerzo. Hay un documento de 10 páginas sobre cómo hacer que tiene un momento alucinante en el medio donde de repente se ve cómo el compilador puede compilarse. Hay un tutorial MetaII (con el papel) en:

http://www.bayfronttechnologies.com/mc_tutorial.html

+0

Si bien todo lo que dices tiene valor, parte del mismo está seriamente limitado a tener una clase particular de idiomas en mente. Existen compiladores para muchos tipos diferentes de idiomas, aquellos que implican conocimiento de ensamblaje, y muchos más que no. Creo que lo que estás tratando de decir es que debes saber qué es lo que quieres hacer y con qué quieres terminar. – jer

+0

@Jer: sí, lo es, pero dudo que vaya a compilar un objetivo Prolog como punto de partida. La mayoría de las clases de compiladores tradicionales se centran en algún tipo de ensamblador simplificado, por lo que es una buena apuesta saber que será útil. –

+0

No es lo que quise decir. Mire todos los sistemas que existen hoy en día, incluso en los lenguajes de programación, usted tiene muchos más intérpretes, que a su vez contienen un compilador junto con el ciclo read-eval. Además, hay otros sistemas, como motores de resaltado de sintaxis, hasta llegar a los archivos de configuración. – jer

0

La primera vez que alguien ha explicado compilación a mí, me sorprendió lo arraigada en la convención que fue todo. Siempre hubo las mismas etapas de alto nivel en la compilación, con las mismas divisiones en las subtareas.

En retrospectiva, parte de ella es un poco arbitraria. Escribir un compilador es difícil y volver a aplicar las técnicas que han funcionado para muchos otros en el pasado es de hecho una buena idea. Pero dependiendo de sus antecedentes, al principio puede sorprenderse de que todo no fluya naturalmente de los principios básicos tanto como en otras áreas de la informática.

Cuestiones relacionadas