Erstellt von Ronaldo Gomez
vor mehr als 5 Jahre
|
||
Análisis Léxico: A la primera fase de un compilador se le llama análisis léxico o escaneo. La cadena de entrada se recibe como una sucesión de caracteres. El análisis léxico agrupa los caracteres en secuencias con significado colectivo y mínimo en el lenguaje, llamadas componentes léxicos (palabras o “token”), con ciertos atributos léxicos.
Análisis sintáctico: Los componentes léxicos se agrupan para formar frases. El valor léxico de los componentes es en este momento irrelevante. Normalmente las frases se representan mediante una estructura de árbol sintáctico, siguiendo reglas que describen el lenguaje.
Análisis semántico: En esta etapa se revisa el resultado del análisis sintáctico, recopilando por ejemplo información de tipos y construyendo una representación aún más abstracta. En el ejemplo que estamos considerando, en esta fase se anotará el tipo de los identificadores cuando se revise la declaración de variables (var inicial, posicion, velocidad: real), de forma que la tabla de símbolos ahora contendrá más información.
Generación de código intermedio: Se genera en esta fase un código intermedio para una máquina abstracta, y es posible que explícitamente . Esta representación debe ser fácil de producir y fácil de traducir al programa objeto. Puede tener diversas formas. Una posible es la llamada código de tres direcciones, que consiste en una secuencia de instrucciones, cada una de las cuales involucra: a lo sumo un operador (unario o binario), además de la asignación , tres direcciones a lo sumo (las de los operandos y la del resultado)
Optimización de código: Se trata en esta fase de mejorar el código, en el sentido de reducir la cantidad de recursos (tiempo y memoria) necesarios. Algunas optimizaciones son triviales, como por ejemplo hacer algunas transformaciones directamente en la compilación, en lugar de dejarlo para la ejecución (sustituir InToReal(60) por 60.0). Otras pueden requerir un trabajo mucho mayor, pero mejorar significativamente la eficiencia, normalmente a costa de alejarse bastante del código original, como eliminar código inactivo (inaccesible), eliminar variables intermedias o reutilizar sentencias independientes de un bucle fuera de éste. Muchos compiladores permiten elegir la cantidad de optimización a realizar o no hacerla.
Generación de código: En esta fase final se genera por fin el código objeto, normalmente código máquina re-localizable o ensamblador. Se seleccionan entonces posiciones de memoria relativas o registros para las variables y cada sentencia del código intermedio se traduce a una secuencia de instrucciones que ejecutan la tarea.
Möchten Sie kostenlos Ihre eigenen Notizen mit GoConqr erstellen? Mehr erfahren.