Want to make interactive content? It’s easy in Genially!

Over 30 million people build interactive content in Genially.

Check out what others have designed:

Transcript

Transformando código en soluciones

El compilador

Trabaja como un traductor entre nosotros y la computadora, tomando el código que escribimos en el lenguaje, bien sea Javascript o Python, y posteriormente lo coniverte en algo que la máquina pueda entender, con su propio lenguaje de ceros y unos.

Un compilador es un programa que convierte el código fuente escrito en un lenguaje de alto nivel a un lenguaje máquina.

Ejemplo

Compilador

Función

Ejemplo

Ejemplo

Generación código final

Ejemplo

Ejemplo

Ejemplo

Fases de un compilador
Optimizador de código
Generación de código intermedio
Análisis semántico
Análisis sintaxis
Análisis léxico

Title 1

Lenguaje de programación Orientada a Objetos

Sintaxis y semántica

Lenguajes de alto y bajo nivel

Lenguaje de programación Funcional

Lenguajes de alto y bajo nivel

Definición Alfabetos

Papel en los lenguajes de programación

Tipos de lenguaje de programación

DefiniciónLenguaje Programación

aLFABETOS Y LENGUAJES

Ejemplo

Ejemplo

Una cadena (o bien, string), es una secuencia de caracteres, puede incluir letras, números, espacios y símbolos. Usado para representar texto o datos en forma de caracteres

Consiste en el proceso de unir 2 o más secuencias de caracteres (o bien, cadenas), en una sola. Con el fin de juntar fragmentos de texto para crear una frase más grande

En pocas palabras, es cuando toma una cadena y la repites un número específico de veces

Cadenas

Concatenación de cadenas

Repetición de cadenas

Operaciones con cadenas

Title 1

jEjemplo #1

Ejemplo #1

Ejemplo #2

Ejemplo #3

Title 1

jEjemplo #1

Ejemplo #1

Ejemplo #2

Ejemplo #3

Title 1

  • Realizar el análisis de los lenguajes de programación me permitió ver sus diferencias, los niveles altos y bajos, cada uno con sus ventajas. Seguidamente, el alfabeto es la base de todo, comprender este tema hizo que la estructura de los lenguajes sea más lógica
  • Al hablar de las cadenas en programación, nos encontramos con la manipulación de operaciones como concatenar y/o medir longitud. Sin duda, aprender como funciona estás operaciones con ejemplos, hizo que su aplicación en la parte práctica fuera clara
  • Realizar la comparación de las gramáticas me enseño como las independientes son claras y predecibles, en comparación a las ambiguas, que pueden generar confusión. Posteriormente se entendió que la cerraduras de Kleene y positivas permiten repetir patrones de forma flexible
  • El esquema del compilador, me permitió entender como el código es convertido en algo para que la máquina sea capaz de procesarlo. Además, ver cada fases, mostrando la importancia de lo que es escribir bien desde el principio

Conclusiones

Un lenguaje de programación es un sistema de comunicación entre humanos y máquinas, permitiendo escribir instrucciones para que una computadora realice tareas específicas, implementado para el desarrollo de software, aplicaciones y sistemas operativos

¿Qué es un lenguaje de programación?

No obstante, la semántica está encargada del significado de dichas instrucciones, mientras que, la sintaxis se asegura que el código este bien escrito, está determina lo que realmente hará el código al momento de ejecutarlo

Cuando hablamos de la sintaxis en el campo de la programación, nos referimos a las reglas y estructura que deben seguir al momento de escribir código.

En este caso, convertimos x = a + ben código intermedio como:t1 = a + b; x = t1Donde t1 sería la variable temporal donde se estará almacenando el resultado

Ejemplo de generación de código intermedio

Los pasos que se siguieron para llegar al resultado fueron:A)Se definió el número base y el sufijo (siendo 42 y 00)B)Posteriormente, se repite el número base 3 veces, usando el operador de repetición "*"C)Luego, se concatena el sufijo al final del resultadoD)Por ultimo, visualizamos el resultado, siendo una cadena que representa una contraseña segura

Tendríamos:password = (numeroBase * 3) + sufijoSiendo el resultado:"42424200"

  • numeroBase= "42"
  • sufijo= "00"
  • Ahora bien, queremos repetir el numeroBase 3 veces, y posteriormente añadirlo al sufijo final

Para este caso, imaginemos que queremos generar un patrón numérico para un sistema de seguridad, y deseamos crear una contraseña compuesta por un número base, y este se repita varias veces e incluya un sufijo numérico . Tendríamos los siguientes datos

Para la declaración if(x>0) {y =1 0}El análisis sintáctico comprueba que la sintaxis este correcta, de manera que se asegura de que la condición x > 0 este formada correctamente, además de que las llaves les correspondan

Ejemplo análisis sintáctico

Cerradura Positiva-> Conjunto A ={x, y} : 1) Comenzamos con la cadena vacía e.2)Luego, añadimos combinaciones de x e y en todas las longitudes posibles.3) Posteriormente, excluyen la cadena vacía,y se genera el resto de las cadenas x, y, xx, xy, yx, ...

Cerradura de Kleene -> Conjunto A ={x, y} : 1) Comenzamos con la cadena vacía e.2)Luego, añadimos combinaciones de x e y en todas las longitudes posibles.3) Posteriormente, se generará todas las cadenas como e, x, y, xx, xy, yx, ...

Explicación de los pasos realizados

El códigot1 = a + bPuede ser convertido a instrucciones de máquina específica para una arquitectura, como:LOAD aLOAD BADDSTORE t1

Ejemplo del Generación del código final

Cerradura Positiva-> Conjunto A ={a, b} : 1) Comenzamos con los elementos de A: a y b2)Luego, añadimos combinación 0 en todas las longitudes posibles.3) Posteriormente, se excluye la cadena vacía, y se genera el restos de las cadenas como 0, 00, 000, ...

Cerradura de Kleene -> Conjunto A ={0} : 1) Comenzamos con la cadena vacía e.2)Luego, añadimos combinación 0 en todas las longitudes posibles.3) Posteriormente, se generará todas las cadenas como e, 0, 00, ...

Explicación de los pasos realizados

Lisp
Haskell

Su principal característica es que, es ideal al trabajar con operaciones matemáticas complejas, cálculos masivos, y sistemas que requieren de alta confiabilidad

Este lenguaje se caracteriza por la creación y manipulación de funciones matemáticas. Si bien, el código es construido a partir de funciones puras, recibiendo entradas y posteriormente devolviendo salidas, sin alterar datos externos ni depender de variables globales. Si bien, los que destacan son Haskell y Lisp

Mientras que los lenguajes de alto nivel son aquellos que son más cercanos al lenguaje humano, y fáciles de aprender. Ejemplos de estos podrían ser Java y Python, estos lenguajes son independientes de la arquitectura de la máquina

Los lenguajes de bajo nivel se encuentran cerca del hardware de la computadora, y suelen ser más difíciles de entender por los humanos. Un ejemplo de estos sería el lenguaje de máquina (que trabaja con los números binarios), y el lenguaje ensamblador

Ahora bien, en el siguiente códigoint a = "texto"El análisis generaría un error, debido a que se está intentando asignar un valor de tipo cadena, a una variable de tipo entero

Ejemplo análisis semántico

Para la gramática ambigua (S -> aS | bS |a |b)1) Comenzamos con S, 2)Posteriormente elegimos la producción S -> aS y expandimos S a aS, 3) Repetimos la aplicación de S con S ->a para obtener aa, 4) También tendríamos la opción de elegir S ->bS en lugar de S -> aS, dando un lugar diferente a las combinación como ab o ba

Para GIC ( S -> aSa | b)1) comenzamos S, 2)Posteriormente aplicamos la producción S->aSa para expandir S, 3)Luego, sustituimos el nuevo S con b usando S->b, 4)Obtenemos la cadena generada, siendo aaab

Explicación de los pasos realizados

Para la gramática ambigua (S -> AB | a)1) Comenzamos con S, 2) Aplicamos la producción S -> AB para obtener AB 3)Luego sustituimos A y B por a, resultando en aa 4)Si bien, tenemos una alternativa donde podemos aplicar S -> a directamente para obtener a

Para GIC (S -> xSy | e)1) Comenzamos con S2) Aplicamos S -> xSy para expandir a xSy 3)Luego, repetimos la aplicación de S -> xSy, y obtenemos xxSyy4)Por ultimo, sustituimos S por e, resultando xxyy

Explicación de los pasos realizados

Supongamos que tenemos el siguiente código:int a = 5;int b = 10;int c = a + b;int d = a + b ;-> aquí estariamos repitiendo el procesoLa optimización seríaint a = 5;int b = 10;int c = a + b;int d = c -> Ahora reutilizaríamos el resultado

Ejemplo de optimización de código

El alfabeto en un lenguaje de programación es un conjunto de símbolos usados, como letras, número y operadores, dichos símbolos forman las instrucciones que una computadora pueda entender.

Pero, en los lenguajes de alto nivel, el alfabeto es amplio y más amigable para los humanos, debido a que nos deja usar palabras reservadas, como por ejemplo en python con if, else y while, además de símbolos matemáticos y lógicos (+, - , &&, ==).

Si bien, los lenguajes de bajo nivel, tales como el ensamblador o el lenguaje de máquina son muy limitados. Debido que, los símbolos suelen ser números binarios (0 y 1), o bien mnemónicos simples (instrucciones básicas como MOV y ADD), por lo que está directamente relacionados con el hardware del computador.

Cerradura Positiva-> Conjunto A ={a, b} : 1) Comenzamos con los elementos de A: a y b2)Luego, generamos combinaciones de a y b en todas las longitudes posibles3) Posteriormente, se excluye la cadena vacía, y se genera el resto

Cerradura de Kleene -> Conjunto A ={a, b} : 1) Comenzamos con la cadena vacía e.2)Luego, añadimos combinaciones de a y b en todas las longitudes posibles.3) Posteriormente, se generará todas las cadenas.

Explicación de los pasos realizados

Para finalizar, los pasos que se realizaron para llegar a dicho resultado fue:A)Se definio cada parte de los númerosB)Posteriormente, se concadena las cadenas, añadiendo el símbolo "+" y espacio para tener mayor claridadC)El resultado esperado es un identificador legible, y bien formado

Una vez definidos los datos, creamos el identificador completo: identificador_usuario = "+" + codigoPais + " " + codigoArea + " " + numero_telefonoSiendo el resultado: "+58 212 1234567"

Supongamos que estamos construyendo un identificador de usuario para un sistema, esto incluirá el código de país, el código de área y un número de teléfono. Por lo que, tendríamos los siguientes datos:

  • codigoPais = "58"
  • codigoArea = "212"
  • numero_telefono = "1234567"

Para el código:float temperatura = 36.6El análisis léxico lo convierte en los tokens

  • float -> Identificador
  • temperatura-> Identificador
  • = -> Asignación operador
  • 36.6 -> Número

Ejemplo del análisis léxico

Para la gramática ambigua (S -> SS | a)1) Comenzamos con S, 2)Aplicamos la producción S -> SS, dando como resultado dos S3)Luego, elegimos S -> a para ambos S, resultando en aa4) Si bien, tenemos una alternativa, sería aplicar S -> a para uno y S -> para el otro, generando ab

Para GIC (S -> 0S1 | 01 )1) Comenzamos con S2)Luego, aplicamos S -> 0S1, expandiendo a 0S13)Posteriormente, repetimos este proceso con S usando 0S1 nuevamente, obteniendo 00S114)Finalizamos sustituyendo S por 01 para conseguir la cadena 0011

Explicación de los pasos realizados

Este lenguaje se encarga de organizar el código en torno a objetos, dichos objetos son representaciones de entidades del mundo real, o bien, concepto abstractos. Donde, cada objeto tiene atributos (o bien, datos), además de métodos (acciones), que permiten manipular dichos datos