Ensayo LenguajesFormales y compilador

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 7

Ingeniería en Sistemas Computacionales

Lenguajes y autómatas I
Introducción

En la programación los lenguajes tienen su relación con los


compiladores en función de que estos últimos traducen o producen un
programa equivalente al lenguaje entrante con otro lenguaje saliente.

En esta afinación el lenguaje dará lugar a ese conjunto de reglas y


simbolismos encontrados en un programa que posteriormente un
compilador va a “traducir” a lenguajes de programación de alto nivel,
quiere decir esto que pasara a ser más legible al lenguaje de los
humanos.

Los lenguajes formales tienen como todo lenguaje, sus reglas y


simbolismos para ser expresados.

Con lo anterior mencionado durante este ensayo se tratará a cerca de


los lenguajes formales, sus conceptos y características, además de
las fases que un compilador tiene, como podemos relacionarlos entre
ambos a través de conclusiones y con la investigación realizada el
poder relacionarlos.
Lenguajes formales
Un lenguaje formal en base a lo investigado, es aquel conjunto
(pudiendo ser finito o de carácter infinito) de símbolos primitivos.
Aquí se le considera “primitivo” a los símbolos ya que son la base para
formar palabras u expresiones, tratándose de una mayor complejidad
la formación de estas.

Un buen ejemplo de estos conjuntos sería los números. Por ejemplo:


El lenguaje se llama “Números” o “Numérico” el cual se puede
considerar un conjunto infinito y que a su vez tiene un conjunto finito
de dígitos (los cuales son los símbolos) y son: {0,1,2,3,4,5,6,7,8,9}.

Ahora retomando lo mencionado en la introducción a cerca de las


reglas que debe seguir un lenguaje, se toman en cuenta las siguientes
afirmaciones:
*El alfabeto del lenguaje es un conjunto finito no vacío de símbolos.
*Tiene gramática, y es un conjunto finito de reglas para formar
cadenas de símbolos pertenecientes al alfabeto.
*cada cadena de símbolos de un lenguaje formal se le llama “fórmula
bien formada” o como se le conoce comúnmente “palabra”.

El lingüista Noam Chomsky clasifico la gramática para lenguajes


formales de la siguiente manera:

*Tipo 3: Gramáticas regulares que generan lenguajes regulares


*Tipo 2: Gramáticas incontextuales que generan lenguajes
incontextuales
*Tipo 1: Gramáticas contextuales que generan lenguajes contextuales
*Tipo 0: Gramáticas libres que generan lenguajes sin ningún tipo de
restricción
Esto quiere decir que cuanto menor es el tipo, mayor es el poder
expresivo del lenguaje y más complejo será apara una máquina poder
entenderlo o procesarlo.

Ahora bien, para la parte de los autómatas y las máquinas, nos


importa que un lenguaje sea de tipo regular, para que obtenga las
características de:
*Ser escrito de manera simple y compacta, y que a su vez describa o
contenga las cadenas de símbolos.
*Pueda ser reconocido por un autómata finito.

Fases de un compilador
Un compilador va a operar en fases tales que como se menciono
anteriormente, van a transformar el programa o lenguaje fuente a otro
lenguaje de mayor nivel al de entrada.
Un compilador se puede clasificar de tipo de una pasada (una
revisión), de múltiples, de cargar y depurar, únicamente depuración y
de optimización. Pero a pesar de esto, el objetivo y tarea de cada
compilador es el mismo.
Las fases por las que pasa un compilador son las siguientes:

Un análisis Léxico
Durante esta fase el compilador busca en el código fuente la
secuencia de caracteres y la transforma en un lexema (un lexema se
le llama al significado que adquiere una palabra). En la programación
podemos encontrar ejemplos como el siguiente:
<token-name, attribute-value>
Un análisis de sintaxis
Adquiere el token (son símbolos o signos para este contexto de
programación) obtenido del análisis de léxico y comprueba si esta
expresión del token es correcta sintáctica.

Análisis semántico
En la fase anterior para comprobar que sea correcto el token se forma
todo un árbol, aquí se corrobora si el árbol sigue las reglas del
lenguaje.
El ejemplo más sencillo es cuando los tipos de valores que se
manejaran, al realizar operaciones entre ellos hay que corroborar que
sean del mismo tipo.

Generación de código intermedio


Después del análisis semántico, se genera un código intermedio del
código fuente. Este código que esta entre el lenguaje máquina y el
lenguaje de alto nivel, se va a dirigir a otra máquina de destino, con la
finalidad de que sea mejor de analizar en vez de hacerlo desde cero.

Optimización de código
Se limpia o depura partes del código intermedio que no son realmente
necesarias.

Tabla de símbolos
Es una estructura que puede almacenar y buscar operaciones,
direcciones de memoria y/o símbolos para las variables y etiquetas del
programa que se genera.

Gestor de errores
El compilador va a detectar errores que se produzcan para
posteriormente informarlos.
A pesar por lo general, de ocurrir un error, un compilador puede seguir
buscando en el programa más errores para informar, pero para ello va
de la mano con un traductor, ya que el compilador por si solo detecta
errores estáticos (no errores ya en tiempo de ejecución).

Estos errores son los que un programador empieza a conocer en


fundamentos de programación en los IDE sobre todo. Estos son de
tipo:

*Errores léxicos (ortográficos)


*Sintácticos (construir el programa como estructuras de manera
incorrecta)
*Semánticos (errores de tiempo de ejecución como sobre pasar el
rango de un vector o dividir entre cero).

Conclusiones
Las máquinas, al igual que los humanos, necesitan un lenguaje para
comunicarse, pero no puede aplicarse el mismo lenguaje para la
creación de software, comunicar este mismo con otro o con el
hardware, por lo que el compilador actúa como un intermediario,
traduciendo de un lenguaje a otro, o creando un lenguaje intermedio
para que otras máquinas puedan interpretarlo.

Considero es importante conocer esto y sobre todo si un ingeniero se


dedicara a la creación de software, para comprender una parte del
como se comunican y se genera el código que se programa por los
humanos.
Fuentes Información

Clasificación de las gramáticas chomsky

matematicasxcomputacion.wordpress.com/2016/11/18/6-2-2-
clasificacion-de-las-gramaticas-chomsky/

Fases de un compilador y sus fundamentos teóricos

sites.google.com/site/teoriadelenguajesformaless/1-7-fases-de-un-
compilador

tutorialspoint.com/es/compiler_design/
compiler_design_phases_of_compiler.htm

Repaso- Lenguajes formales


fdi.ucm.es/profesor/fpeinado/courses/compiling/repaso-
lenguajesformales.pdf

También podría gustarte