Herramientas de usuario

Herramientas del sitio


arm_compilacion

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
arm_compilacion [2020/04/28 23:14] marianoarm_compilacion [2024/12/11 23:50] (actual) – [Compilación] mariano
Línea 1: Línea 1:
 ===== El Proceso de Compilación ===== ===== El Proceso de Compilación =====
 +\\
  
 ==== Introducción ==== ==== Introducción ====
  
-Vamos analizar por separado las etapas más importantes que comprenden el proceso de compilación (preprocesamiento, generación de código y enlace), y también se presentará una forma de automatizar ese proceso (mediante la herramienta make), en especial cuando los proyectos adquieren tamaños considerables e involucran varios archivos fuente, de cabecera o bibliotecas.+Vamos analizar por separado las etapas más importantes que comprenden el proceso de compilaciónpreprocesamiento, generación de código y enlace
  
 ==== Proceso de Compilación ==== ==== Proceso de Compilación ====
Línea 9: Línea 10:
 En el ámbito de las computadoras, los algoritmos se expresan mediante lenguajes de programación, como C, Python, C#, Java, Ensamblador, etc. Sin embargo, esta representación no es suficiente, ya que el procesador necesita una expresión mucho más detallada del algoritmo, que especifique en forma explícita todas las señales eléctricas que involucra cada operación. En el ámbito de las computadoras, los algoritmos se expresan mediante lenguajes de programación, como C, Python, C#, Java, Ensamblador, etc. Sin embargo, esta representación no es suficiente, ya que el procesador necesita una expresión mucho más detallada del algoritmo, que especifique en forma explícita todas las señales eléctricas que involucra cada operación.
  
-La tarea de traducción de un programa desde un lenguaje de programación de alto nivel hasta el lenguaje de máquina se denomina compilación, y la herramienta encargada de ello es el compilador. En la figura siguiente se pueden distinguir las etapas más importantes:+La tarea de traducción de un programa desde un lenguaje de programación (ya sea alto o bajo nivelhasta el lenguaje de máquina se denomina compilación, y la herramienta encargada de ello es el compilador. En la figura siguiente se pueden distinguir las etapas más importantes:
  
 {{ :procesocompilacion.png?650 |}} {{ :procesocompilacion.png?650 |}}
Línea 25: Línea 26:
 ==== Compilación ==== ==== Compilación ====
  
-La compilación es el proceso que, en sí, traduce el lenguaje de alto nivel en lenguaje de máquina. Dentro de esta etapa pueden reconocerse, al menos, cuatro fases:+La compilación es el proceso que, en sí, traduce el lenguaje de programación (ya sea alto o bajo nivelen lenguaje de máquina. Dentro de esta etapa pueden reconocerse, al menos, cuatro fases:
  
   * Análisis léxico.   * Análisis léxico.
Línea 37: Línea 38:
 El ''análisis léxico'' extrae del archivo fuente todas las cadenas de caracteres que reconoce como parte del vocabulario y genera un conjunto de tokens como salida. En caso de que parte del archivo de entrada no pueda reconocerse como lenguaje válido, se generarán los mensajes de error correspondientes. El ''análisis léxico'' extrae del archivo fuente todas las cadenas de caracteres que reconoce como parte del vocabulario y genera un conjunto de tokens como salida. En caso de que parte del archivo de entrada no pueda reconocerse como lenguaje válido, se generarán los mensajes de error correspondientes.
  
 +{{ :procesocompilacion3.png?600 |}}
 +
 +A continuación, durante el ''análisis sintáctico'', se procesa la secuencia de tokens generada con anterioridad, y se construye una representación intermedia, que aún no es lenguaje de máquina, pero que le permitirá al compilador realizar su labor con más facilidad en las fases sucesivas. Esta representación suele ser un árbol.
 +
 +{{ :procesocompilacion4.png?500 |}}
 +
 +Durante el ''análisis semántico'' se utiliza el árbol generado en la fase previa para detectar posibles violaciones a la semántica del lenguaje de programación, como podría ser la declaración y el uso consistente de identificadores (por ejemplo, que el tipo de dato en el lado derecho de una asignación sea acorde con el tipo de dato de la variable destino, en el lado izquierdo de la asignación).
 +
 +Por último, en la generación de código se transforma la representación intermedia en lenguaje de máquina (código objeto). En los casos típicos esta fase involucra mucho trabajo relacionado con la optimización del código, antes de generarse el lenguaje de máquina.
 +
 +En el caso de un lenguaje ensamblador, el compilador se llama ensamblador y el codigo obtenido se llama código máquina y puede ser procesado directamente por el procesador.
 +
 +==== Enlace ====
 +
 +No siempre las aplicaciones se construyen de manera monolítica, a partir de un solo archivo fuente. En la práctica sólo se escribe una parte, y lo demás se toma de bibliotecas externas que, en la última etapa de la compilación, se enlazarán unas con otras para generar la aplicación ejecutable final. Ésta es, básicamente, la tarea del ''enlazador'', también conocido como ''linker''.
 +
 +Los archivos objeto que se enlazan a nuestro programa se denominan bibliotecas externas que, por su parte, pueden haber sido construidas por nosotros mismos o pueden provenir de terceras partes (por ejemplo, las bibliotecas estándares del compilador). Una biblioteca, en este contexto, es una colección de funciones y en el proceso de enlace se añade al código objeto el código de la función a la que se hizo referencia. Si tenemos otros códigos objetos el proceso de enlace los combina para obtener un único ejecutable, como se ilustra en la siguiente figura:
 +
 +{{ :linker.png?400 |}} 
 +
 +
 + --- //[[mariano.vargas@gmail.com|Mariano Vargas]] LOL // \\
 +[[oc1|Volver]]
 +
 +~~NOCACHE~~
 +({{counter|total}})
× iphelper toolbox

you see this when javscript or css is not working correct

Untested
IP Address:
First usable:
Subnet:
Last usable:
CIDR:
Amount of usable:
Network address:
Reverse address:
Broadcast address:

arm_compilacion.1588115658.txt.gz · Última modificación: 2020/04/28 23:14 por mariano