Ir al contenido principal

Compiladores


En un mundo en constante evolución, la tecnología se ha convertido en una parte integral de nuestras vidas. La tecnología ha transformado todos los aspectos de nuestra sociedad, desde la forma en que nos comunicamos hasta la forma en que trabajamos, aprendemos y jugamos.

En este blog, vamos a conocer algunos conceptos utilizados en la programación, los cuales abarcan en diferentes lenguajes y tienen distintas funciones. Es muy importante tener un conocimiento, al menos básico y estar preparados para el mundo y su constante evolución en el ámbito tecnológico.


Compiladores:

Un compilador o intérprete es un  programa informático que traduce todo un código fuente de un proyecto de software a código máquina antes de ejecutarlo. 

De esta manera, el procesador cuenta con todos los componentes necesarios para ejecutar el software, procesar las entradas y generar los resultados.



 

  • Compilador e Interprete 

Tanto los compiladores como el intérprete tiene la función de convertir el código de software que se ha escrito en formato ejecutable y legible por la máquina. En esta traducción, el procesador de una computadora no puede ejecutar software en lenguajes como C, C++, PHP, Python o Ruby, lo que hace que estos programas sean una parte esencial del uso de una computadora, computadora portátil o teléfono inteligente.

El compilador y el interprete tiene ciertas diferencia básicas, alguna de estas, son:



Si analizamos las diferencias, nótanos que cada uno de ellos presenta sus puntos fuertes y débiles.
Estos también tienen ventajas y desventajas, por ejemplo: 

-Ventaja del Intérprete:
Proceso sencillo de desarrollo.
-Desventaja del intérprete:
Proceso de traducción poco eficiente y velocidad de ejecución lenta.

-Ventaja de un compilador:
Proporciona al procesador el código máquina completo para ejecutar. 
-Desventaja de un compilador:
Cualquier modificación del código, requiere volver a traducir. 


Análisis: Léxico y Sintáctico:

Mapas conceptuales con un explicación resumida de que es Yacc y Flex, con algunas características y definiciones. 



  • Analizador léxico

El analizador léxico (scanner o tokenizer) Es la primera fase de un compilador, consiste en un programa que recibe como entrada el código fuente de otro programa (secuencia de caracteres) y produce una salida compuesta de tokens  (componentes léxicos) o símbolos.

La especificación de un lenguaje de programación a menudo incluye un conjunto de reglas que definen el léxico. Estas reglas consisten en expresiones regulares que indican el conjunto de secuencia de caracteres que definen un token o lexema 

  • Analizador sintáctico: 

Un analizador sintáctico (parser) es un programa, el cual es parte de un compilador. 
Su función es la descomposición y transformación y transformación  de las entradas en un formato utilizable para su posterior procesamiento.  

  • Tipos de analizadores: 

-Top-Down: Trabaja en un método orientado a objetos.
-Botton-up:  Los analizadores de arriba hacia abajo comienzan con símbolos en la cadena de entrada e intentan construir relaciones gramaticales cada vez más grandes. Haga esto hasta llegar al símbolo de inicio de gramática.

  • Aplicaciones: 

-La lectura del lenguaje de programación la realiza el analizador. Proporciona al compilador una estructura de datos que se puede utilizar para generar código de máquina o código de bytes.
-Los analizadores XML especiales son responsables de analizar documentos XML y preparar la información contenida en ellos para su uso posterior.
-Los analizadores de URI dividen esquemas complejos, como las URL, en jerarquías.

  • Diferencia entre analizador léxico y sintáctico: 

-Función principal:
Analizador léxico: Se encarga de dividir el código fuente en unidades pequeñas  llamadas "tokens".
Analizador sintáctico: Se encarga de analizar la estructura gramatical.

-Entrada:
Analizador léxico: Recibe el código fuente como entrada y lo convierte en secuencia de tokens..
Analizador sintáctico: Recibe la secuencia de tokens como entrada y verifica si sigue la reglas sintácticas.

-Objetivo:
Analizador léxico: Identificar y clasificar los tokens presentes en el código fuente, eliminando caracteres en blanco y comentarios.
Analizador sintáctico: Determina la estructura jerárquica del código fuente.

-Salida:
Analizador léxico: Genera secuencia de tokens  que pasa por el analizador sintáctico.
Analizador sintáctico: Genera una representación intermedia, que captura la estructura jerárquica del código fuente.

En resumen, el analizador léxico se encarga de descomponer el código fuente en unidades significativas llamadas tokens, mientras que el analizador de sintaxis se encarga de verificar que la estructura jerárquica de estos tokens se ajuste a las reglas gramaticales del lenguaje de programación. Juntos, los dos procesan el código fuente y lo preparan para etapas posteriores de compilación o interpretación.

Lex (FLEX) y YACC (Bison):

-LEX y FLEX son ejemplos de generadores léxicos. Flex lee desde la entrada estándar si no se especifica explícitamente un fichero de entrada. El fichero de entrada reglen.1 (se suele usar el tipo 1) debe tener la forma:

%{
declaration C1
.
declaration CM
%}
macro_name1 regular_definition1

macro_nameR regular_definitionR

%x exclusive_state
%s inclusive_state
%%

regular_expression1 { action1(); }
.
.
regular_expressionN { actionN(); }

%%
support_routine1() {
}
.
.
support_routineS() {
}

-YACC (Bison)

main() { yyparse() }

void yyerror (char *s)

{

printf("%s\n",s);

}


En conclusión, los compiladores y sus ramas son una herramienta de la programación que automatiza de manera excelente ciertas tareas para los usuarios, transformando nuestro lenguaje humano en instrucciones que las distintas tecnologías puedan comprender y ejecutar-

Comprender las funcionalidades de los distintos conceptos vistos en nuestro blog , ganamos un apreciación más amplia y entendida por la ingeniería. En mundo donde la tecnología es parte importante de nuestras vidas y tiene una evolución o actualización constante, es importante mantenerse informado, aprender nuevas habilidades y ser autodidactas para así mismo, avanzar con el mundo a través de los años.


¿Qué es un analizador sintáctico? - Ryte Marketing Wiki. (s. f.). https://es.ryte.com/wiki/Analizador_Sint%C3%A1ctico#:~:text=Un%20analizador%20sint%C3%A1ctico%20o%20parser,correctamente%20a%20un%20lenguaje%20ejecutable.


colaboradores de Wikipedia. (2022). Analizador léxico. Wikipedia, la enciclopedia libre. https://es.wikipedia.org/wiki/Analizador_l%C3%A9xico



Equipo editorial de IONOS. (2020). Compilador e intérprete: definición y diferencias. IONOS Digital Guide. https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/compilador-e-interprete/#:~:text=Un%20compilador%20es%20un%20programa,c%C3%B3digo%20m%C3%A1quina%20antes%20de%20ejecutarlo.



Comentarios