lunes, 21 de octubre de 2013

Internals of GCC

El podcast el cual tiene como invitado a Morgan Deters, es muy interesante, ya que refuerza algunos conceptos que ya teníamos sobre las fases de un compilador. GCC es un compilador del proyecto GNU para C, C++, Objective C y Fortran, el cual a partir de un programa fuente se genera un ejecutable ensamblado en el lenguaje en dónde se va a correr.

GCC tiene la característica de ser portable y flexible. Como se menciona, puede correr en varias arquitecturas como X86, Sparc, entre otras; esto debido a que tiene la capacidad de funcionar como compilador cruzado. Una de las cosas que encontré y me gustaría comentar es que en sí, gcc no genera código binario, sino que genera código ensamblado. La fase donde se realiza está transformación de código la realiza el ensamblador de GNU y el enlazado de objetos.

Comúnmente en compiladores cuando el texto se lee se parsea en tres representaciones y un AST que contiene las representaciones de lo que el programa quiere decir. Es más útil utilizar un árbol de sintaxis abstracta, pensando en que algunas expresiones como las matemáticas se pueden representar en un árbol, a partir de esto se hace el análisis semántico en el cuál se revisan algunas cosas, como las variables a las que se hacen referencias, estén declaradas anteriormente.

Al hacer nuestro compilador podemos tener más contexto sobre cada una de estas fases, análisis léxico, sintáctico, generación del AST, semántica y generación de código, podemos tener una manera más clara sobre las partes que contribuyen a convertir un lenguaje de alto nivel a un lenguaje que se pueda correr en una o varias arquitecturas según sea el caso. Es importante separar lo que cada una de estas fases realiza, ya que si queremos hacer todo en una fase, ya que tenemos que entender los diferentes niveles por los que se procesa y los diferentes errores en dichas fases que se pueden generar.

Fuentes:
Escuela de Ingenierias Industriales. (21 de octubre, 2013). Compilador: gcc. 21 de octubre de 2013. Disponible en:  http://www.eis.uva.es/~fergay/III/enlaces/gcc.html

Escuela de Ingenierias Industriales. (21 de octubre, 2013). Compilador: gcc. 21 de octubre de 2013. Disponible en: http://iie.fing.edu.uy/~vagonbar/gcc-make/gcc.htm

1 comentario:

  1. Muchas gracias Carlos por tu participación a través de este blog. Espero te haya parecido interesante la materia.

    ResponderEliminar