DEV Community

Tincho
Tincho

Posted on

Proceso de traducción

Me encanta dejar el tema que me gusto en el día y con el que escucho mientras voy escribiendo, así que hoy les dejo:

Proceso de traducción

Analizador léxico 🚩

Es genial empezar por entender que significa léxico para poder entender que hace este analizador léxico. Así que busque por Internet y dice:

Léxico es el vocabulario de un idioma o de una región, el diccionario de una lengua.

Bien esto esto ya empieza a tener sentido, léxico de un idioma, es decir, el idioma en nuestro área se traduce a lenguaje de programación. Un programa o un código fuente esta escrito mediante un lenguaje de este tipo, para luego el cual después de un proceso de traducción una computadora pueda entender y ejecutar estas instrucciones, pero tranquilos, estamos en el primer paso del proceso, falta para eso.

Entonces podemos decir:

El analizador léxico 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.

Buenísimo el concepto! Lo saque de Wikipedia por si quieren leer mas.

Estos tokens sirven para el posterior fase del proceso de traducción, siendo la entrada para el analizador sintáctico.
Los tokens del lenguaje de programación consisten en:

  • Palabras reservadas
  • Literales o constantes
  • Símbolos especiales
  • Identificadores

Como lo hace?

Buenísimo el concepto, todo lindo todo lindo, pero, COMO FUNCIONA CAPO?

Saber como funciona es clave para la construcción de un analizador léxico, por eso, tenemos que saber los siguiente:

La especificación de un lenguaje de programación a menudo incluye un conjunto de reglas que definen el léxico. Estas reglas consiste comúnmente en expresiones regulares que indican un conjunto de posibles secuencias de caracteres que definen un token.

Made in Wikipedia papa! Si, hay que saber de expresiones regulares para poder hacer un analizador léxico.

Si bien no te dije exactamente como funciona, te doy lo que esta involucrado en ese funcionamiento. Al momento que lees el post, yo me encuentro haciendo este apunte, próximo aplicar luego todo el conocimiento en una practica, así que estoy en deuda en eso para cuando sepa aplicarlo.

Mecanismos

Hay tres mecanismos básicos para construir un
analizador lexicográfico:

Analizador sintáctico 🚩

Como hicimos con la palabra léxico antes, vamos a entender la palabra sintáctico, o mas bien, sintaxis:

La sintaxis se entiende como el grupo de normas que marcan las secuencias correctas de los elementos propios de un lenguaje de programación.

En otras palabras, podemos pensar que hacer una análisis de sintaxis es "ordenar" los elementos propios de un lenguaje, llámese tokens en nuestro caso, de alguna forma correcta, es decir, según ciertas normas o reglas.

Si le queremos dar una vuelta mas de rosca al concepto, buscamos formar una estructura con todos estos tokens que recibimos siguiendo unas ciertas reglas para poder formar esta estructura, que por cierto tiene forma de árbol 🌳.

Analizador Sintáctico

Bien, vamos bien estamos bien!

En paso tenemos los tokens y queremos llegar al árbol 🌳. Pero debemos antes pasar las REGLAS!. Las reglas son la cosa mas inentendible que podrás ver al principio, pero cuando las entendes sos vos! Así que te voy a explicar como se leen y aplican estas reglas. Estas reglas son la que de alguna forma van a ir ordenando los tokens en una estructura de árbol, la primera pregunta que podemos hacer es,como escribimos estas reglas? Podemos usar otra otra palabra un poco mas formal para la ocasión, el lugar de escribir, digamos especificar, bien! Tiene que haber una forma de especificar estas reglas, pues si! Se llama Gramática libre de contexto.

Gramática de libre contexto

Gramática de libre contexto? Si yo también me pregunte lo mismo, en que momento pasamos de estudiar informática a lengua. Pero todo tiene su explicación, y acá desde mi punto de vista personal te doy la mía. Estamos estudiando el proceso de traducción de un lenguaje de programación, como tal, seria un lenguaje, pero uno formal, en la cual estos para su construcción se definen un conjunto de reglas gramaticales que pueden ser de libre contexto.

Por si no fue suficiente mi explicación, deje los links de cada tema. Pero en fin, la idea no es estudiar lengua, la idea acá es conocer como se especifican esas reglas.

Especificación de reglas

Como se ve en la imagen, hay una etiquetas que representan conceptos, es lo que voy a explicar ahora desde mis palabras:

  • No terminal: La primera parte (la izquierda a la flecha) encontramos el no terminal, que básicamente, es como una variable con identificador, es decir, su nombre involucra lo que hay a la derecha de la flecha cuando se lo invoca. También se lo ve a la derecha, este puede ser otra regla o la misma, ya que estas reglas pueden ser recursivas, su nombre deberíamos reemplazar con su correspondiente "parte derecha".
  • Terminal: El terminal es básicamente el token o un valor.
  • Producción: Una producción es cada regla gramatical.

Ahora te estarás preguntando por que se llaman terminales y no terminales. En pocas palabras, eso es porque justamente al no terminal lo debemos reemplazar por su parte derecha, hasta que nos queden solo terminales y no podamos ir haciendo reemplazos (por eso se llaman terminales, porque la terminan), este proceso de ir reemplazando se llama Derivaciones.

Pero antes de hablar de derivaciones, terminemos esto con unos conceptos mas. Cuando armemos reglas o producciones, existen unos símbolos especiales.

Símbolos de las reglas

Y por ultimo las producciones se pueden escribir de otra manera, utilizando la notación de Backus-Naur (BNF). BNF es un sistema de reglas de derivación, escrito como:

<simbolo> ::= <expresión con símbolos>
Enter fullscreen mode Exit fullscreen mode

Derivaciones

Continuara

Top comments (0)