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