lunes, 27 de febrero de 2017

Generación de código intermedio


Código intermedio 


Esta fase del compilador no es en realidad una parte separada del compilador, la mayoría de los compiladores generan código como parte del proceso de análisis sintáctico, esto es debido a que requieren del árbol de sintaxis y si este no va a ser construido físicamente, entonces deberá acompañar al analizador sintáctico al barrer el árbol implícito.


El código intermedio no es el lenguaje de programación de ninguna máquina real, sino que corresponde a una máquina abstracta, que se debe de definir lo más general posible, de forma que sea posible traducir este código intermedio a cualquier máquina real.


Es la fase de compilador genera el código intermedio que es más parecido al código ensamblador, las operaciones por ejemplo nunca se hacen con dos o más operandos ,donde podremos reutilizar parte del compilador que genera código intermedio en otro compilador para una computadora con diferente procesador cambiando solamente el generador de código ensamblador al cual llamaremos BACK END. 

El objetivo del código intermedio es reducir en el número de programas necesarios para construir traductores y permitir fácilmente la transportabilidad de una maquina a otra.



lunes, 20 de febrero de 2017

Analizador semántico


Analizador semántico



La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. En ella se utiliza la estructura jerárquica determinada por la clase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones.

ACTIVIDAD: DOS CONCEPTOS MAS DE ANALIZADOR LÉXICO, EJEMPLO Y REPRESENTACIÓN DE SUS COMPONEN
La fase de análisis semántico de un procesador de lenguaje es aquélla que computa la información adicional necesaria para el procesamiento de un lenguaje, una vez que la estructura sintáctica de un programa haya sido obtenida. Es por tanto la fase posterior a la de análisis sintáctico y la última dentro del proceso de síntesis de un lenguaje de programación.


El objetivo principal del analizador semántico de un procesador de lenguaje es asegurarse de que el programa analizado satisfaga las reglas requeridas por la especificación del lenguaje, para garantizar su correcta ejecución. El tipo y dimensión de análisis semántico requerido varía enormemente de un lenguaje a otro.

La fase de análisis semántico revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código. En ella se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones.

Un componente importante del análisis semántico es la Verificación de Tipos. Aquí, el compilador verifica si cada operador tiene operandos permitidos por la especificación del lenguaje fuente.


Ejemplo:
Producciones

G={Vt, Vn, S, R}
Vt={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,2011,ENERO,FEBRERO,MARZO,ABRIL,MAYO,JUNIO,JULIO,AGOSTO,SEPTIEMBRE,OCTUBRE,NOVIEMBRE,DICIEMBRE }
Vn={Día, Mes, Año, M1, M2, M3,D1, D2, D3 }
REGLAS GRAMATICALES
S = Día/Mes/Año | Año/Mes/Día
Mes = M1|M2|M3
M1 = ENERO|MARZO|MAYO|JULIO|AGOSTO|OCTUBRE|DICIEMBRE
M2 = ABRIL|JUNIO|SEPTIEMBRE|NOVIEMBRE
M3 = FEBRERO
Día = D1|D2|D3
D1 = 2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|
D2 = 2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30
D3 = 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28
Año = 2011
Reglas semánticas
S.Val = Día.Val /Mes.Val /Año.Val | Año.Val /Mes.Val /Día.Val
Mes.Val = M1.Val |M2.Val |M3.Val
M1.Val = ENERO |MARZO |MAYO |JULIO |AGOSTO |OCTUBRE |DICIEMBRE
M2.Val = ABRIL |JUNIO |SEPTIEMBRE |NOVIEMBRE
M3.Val = FEBRERO
Día.Val = D1.Val |D2.Val |D3.Val
D1.Val = 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|
D2.Val = 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30
D3.Val = 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28
Año.Val = 2011




Análisis Sintáctico.


Análisis Sintáctico.


Determina si la secuencia de componentes léxicos sigue la estructura del lenguaje y obtiene la estructura jerárquica en forma de árbol, donde los modos son las construcciones de alto nivel de lenguaje.
Se determinan las relaciones estructurales entre los componentes léxicos, esto es semejante a realizar el análisis gramatical sobre una fase del lenguaje natural
La estructura sintáctica, se define entre las gramáticas independientes del con texto

Clasificación:
La tarea esencial de un analizador es determinar si una determinada entrada puede ser derivada desde el símbolo inicial, usando las reglas de una gramática formal, y como hacer esto, existen esencialmente dos formas:

·         Analizador sintáctico descendente (Top-Down-Parser): un analizador puede empezar con el símbolo inicial e intentar transformarlo en la entrada, intuitivamente esto sería ir dividiendo la entrada progresivamente en partes cada vez más pequeñas, de esta forma funcionan los analizadores LL, un ejemplo es el javaCC.
·         Analizador sintáctico ascendente (Bottom-Up-Parser): un analizador puede empezar con la entrada e intentar llegar hasta el símbolo inicial, intuitivamente el analizador intenta encontrar los símbolos más pequeños y progresivamente construir la jerarquía de símbolos hasta el inicial, los analizadores LR funcionan así


ACTIVIDAD: DOS CONCEPTOS MAS DE ANALIZADOR LÉXICO, EJEMPLO Y REPRESENTACIÓN DE SUS COMPONEN

Análisis Sintáctico: Se encarga de chequear la secuencia de tokens que se representa al texto de entrada, en la base a una gramática dada. En caso de que el programa sea válido, suministra el árbol sintáctico que lo reconoce en base a una representación computacional. Este árbol es el punto de partida de la fase posterior de la etapa de análisis: El analizador semántico.

Bibliografía: Compiladores, Traductores y Compiladores con Lex/Yacc , Sergio Gálvez Rojas y Miguel Ángel Mora Mata (2005).

Análisis Sintáctico: Comprueba que el orden en que el analizador léxico le va entregando los tokens es válido. Si esto es así significará que la sucesión de símbolos que representan dichos tokens puede ser generada por la gramática correspondiente al lenguaje del código fuente.

La forma más habitual de representar la sintaxis de un programa es el árbol de análisis sintáctico, y lo que hacen los analizadores sintácticos es construir una derivación por la izquierda o por la derecha del programa fuente, que en realidad son dos recorridos determinados del árbol de análisis sintáctico.

Funciones del analizador sintáctico:

*Comprobar si la cadena de componentes léxicos proporcionada por el analizador léxico puede ser generada por la gramática que define el lenguaje fuente.

*Construir el árbol de análisis sintáctico que define la estructura jerárquica de un programa y obtener la serie de derivaciones para generar la cadena de componentes léxicos. El árbol sintáctico se utilizara como representación intermedia en la generación de código. Informar de los errores sintácticos de forma precisa y significativa y debería estar dotado de un mecanismo de recuperación de errores para continuar con el análisis.



Ejemplo


Declarar Atributo de clase:
Modificador de Acceso +palabra reservada static+ tipo de dato + nombre del Atributo+;
Ejemplo:
public static int n1;

I---> MSTNE
M----> public, private, protected
S ----> static
T ----> double, int, string…
N -----> L|LN|LD
L -----> A..Z|a..z
D ---> 0..9
E ----> ;

ORDENADORES

ORDENADORES

 Los ordenadores son una mezcla equilibrada de software y hardware  

 Clasificación del Software:


 *Software de Sistema
 *Software General:  Ejemplos: Navegador, Office.
*Software de Aplicación:
*Software de compiladores: Borland.
  Compilador: verificar la estructura de tu código.

 Interprete: Es el que lo va a traducir a un lenguaje más sencillo.

 Un carácter tiene: 8byte.





 VAMOS A ENCRIPTAR EL SIGUIENTE TEXTO:

El vídeo proporciona una manera eficaz para ayudarle a demostrar el punto. Cuando haga clic en Vídeo en línea, puede pegar el código para insertar del vídeo que desea agregar. También puede escribir una palabra clave para buscar en línea el vídeo que mejor se adapte a su documento.
Para otorgar a su documento un aspecto profesional, Word proporciona encabezados, pies de página, páginas de portada y diseños de cuadro de texto que se complementan entre sí. Por ejemplo, puede agregar una portada coincidente, el encabezado y la barra lateral. Haga clic en Insertar y elija los elementos que desee de las distintas galerías.
Los temas y estilos también ayudan a mantener su documento coordinado. Cuando haga clic en Diseño y seleccione un tema nuevo, cambiarán las imágenes, gráficos y gráficos SmartArt para que coincidan con el nuevo tema. Al aplicar los estilos, los títulos cambian para coincidir con el nuevo tema.
Ahorre tiempo en Word con nuevos botones que se muestran donde se necesiten. Para cambiar la forma en que se ajusta una imagen en el documento, haga clic y aparecerá un botón de opciones de diseño junto a la imagen. Cuando trabaje en una tabla, haga clic donde desee agregar una fila o columna y, a continuación, haga clic en el signo más.

ENCRIPTAR EN BINARIO

01000101 01101100 00100000 01110110 11101101 01100100 01100101 01101111 00100000 01110000 01110010 01101111 01110000 01101111 01110010 01100011 01101001 01101111 01101110 01100001 00100000 01110101 01101110 01100001 00100000 01101101 01100001 01101110 01100101 01110010 01100001 00100000 01100101 01100110 01101001 01100011 01100001 01111010 00100000 01110000 01100001 01110010 01100001 00100000 01100001 01111001 01110101 01100100 01100001 01110010 01101100 01100101 00100000 01100001 00100000 01100100 01100101 01101101 01101111 01110011 01110100 01110010 01100001 01110010 00100000 01100101 01101100 00100000 01110000 01110101 01101110 01110100 01101111 00101110 00100000 01000011 01110101 01100001 01101110 01100100 01101111 00100000 01101000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01100101 01101110 00100000 01010110 11101101 01100100 01100101 01101111 00100000 01100101 01101110 00100000 01101100 11101101 01101110 01100101 01100001 00101100 00100000 01110000 01110101 01100101 01100100 01100101 00100000 01110000 01100101 01100111 01100001 01110010 00100000 01100101 01101100 00100000 01100011 11110011 01100100 01101001 01100111 01101111 00100000 01110000 01100001 01110010 01100001 00100000 01101001 01101110 01110011 01100101 01110010 01110100 01100001 01110010 00100000 01100100 01100101 01101100 00100000 01110110 11101101 01100100 01100101 01101111 00100000 01110001 01110101 01100101 00100000 01100100 01100101 01110011 01100101 01100001 00100000 01100001 01100111 01110010 01100101 01100111 01100001 01110010 00101110 00100000 01010100 01100001 01101101 01100010 01101001 11101001 01101110 00100000 01110000 01110101 01100101 01100100 01100101 00100000 01100101 01110011 01100011 01110010 01101001 01100010 01101001 01110010 00100000 01110101 01101110 01100001 00100000 01110000 01100001 01101100 01100001 01100010 01110010 01100001 00100000 01100011 01101100 01100001 01110110 01100101 00100000 01110000 01100001 01110010 01100001 00100000 01100010 01110101 01110011 01100011 01100001 01110010 00100000 01100101 01101110 00100000 01101100 11101101 01101110 01100101 01100001 00100000 01100101 01101100 00100000 01110110 11101101 01100100 01100101 01101111 00100000 01110001 01110101 01100101 00100000 01101101 01100101 01101010 01101111 01110010 00100000 01110011 01100101 00100000 01100001 01100100 01100001 01110000 01110100 01100101 00100000 01100001 00100000 01110011 01110101 00100000 01100100 01101111 01100011 01110101 01101101 01100101 01101110 01110100 01101111 00101110 00001010 01010000 01100001 01110010 01100001 00100000 01101111 01110100 01101111 01110010 01100111 01100001 01110010 00100000 01100001 00100000 01110011 01110101 00100000 01100100 01101111 01100011 01110101 01101101 01100101 01101110 01110100 01101111 00100000 01110101 01101110 00100000 01100001 01110011 01110000 01100101 01100011 01110100 01101111 00100000 01110000 01110010 01101111 01100110 01100101 01110011 01101001 01101111 01101110 01100001 01101100 00101100 00100000 01010111 01101111 01110010 01100100 00100000 01110000 01110010 01101111 01110000 01101111 01110010 01100011 01101001 01101111 01101110 01100001 00100000 01100101 01101110 01100011 01100001 01100010 01100101 01111010 01100001 01100100 01101111 01110011 00101100 00100000 01110000 01101001 01100101 01110011 00100000 01100100 01100101 00100000 01110000 11100001 01100111 01101001 01101110 01100001 00101100 00100000 01110000 11100001 01100111 01101001 01101110 01100001 01110011 00100000 01100100 01100101 00100000 01110000 01101111 01110010 01110100 01100001 01100100 01100001 00100000 01111001 00100000 01100100 01101001 01110011 01100101 11110001 01101111 01110011 00100000 01100100 01100101 00100000 01100011 01110101 01100001 01100100 01110010 01101111 00100000 01100100 01100101 00100000 01110100 01100101 01111000 01110100 01101111 00100000 01110001 01110101 01100101 00100000 01110011 01100101 00100000 01100011 01101111 01101101 01110000 01101100 01100101 01101101 01100101 01101110 01110100 01100001 01101110 00100000 01100101 01101110 01110100 01110010 01100101 00100000 01110011 11101101 00101110 00100000 01010000 01101111 01110010 00100000 01100101 01101010 01100101 01101101 01110000 01101100 01101111 00101100 00100000 01110000 01110101 01100101 01100100 01100101 00100000 01100001 01100111 01110010 01100101 01100111 01100001 01110010 00100000 01110101 01101110 01100001 00100000 01110000 01101111 01110010 01110100 01100001 01100100 01100001 00100000 01100011 01101111 01101001 01101110 01100011 01101001 01100100 01100101 01101110 01110100 01100101 00101100 00100000 01100101 01101100 00100000 01100101 01101110 01100011 01100001 01100010 01100101 01111010 01100001 01100100 01101111 00100000 01111001 00100000 01101100 01100001 00100000 01100010 01100001 01110010 01110010 01100001 00100000 01101100 01100001 01110100 01100101 01110010 01100001 01101100 00101110 00100000 01001000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01100101 01101110 00100000 01001001 01101110 01110011 01100101 01110010 01110100 01100001 01110010 00100000 01111001 00100000 01100101 01101100 01101001 01101010 01100001 00100000 01101100 01101111 01110011 00100000 01100101 01101100 01100101 01101101 01100101 01101110 01110100 01101111 01110011 00100000 01110001 01110101 01100101 00100000 01100100 01100101 01110011 01100101 01100101 00100000 01100100 01100101 00100000 01101100 01100001 01110011 00100000 01100100 01101001 01110011 01110100 01101001 01101110 01110100 01100001 01110011 00100000 01100111 01100001 01101100 01100101 01110010 11101101 01100001 01110011 00101110 00001010 01001100 01101111 01110011 00100000 01110100 01100101 01101101 01100001 01110011 00100000 01111001 00100000 01100101 01110011 01110100 01101001 01101100 01101111 01110011 00100000 01110100 01100001 01101101 01100010 01101001 11101001 01101110 00100000 01100001 01111001 01110101 01100100 01100001 01101110 00100000 01100001 00100000 01101101 01100001 01101110 01110100 01100101 01101110 01100101 01110010 00100000 01110011 01110101 00100000 01100100 01101111 01100011 01110101 01101101 01100101 01101110 01110100 01101111 00100000 01100011 01101111 01101111 01110010 01100100 01101001 01101110 01100001 01100100 01101111 00101110 00100000 01000011 01110101 01100001 01101110 01100100 01101111 00100000 01101000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01100101 01101110 00100000 01000100 01101001 01110011 01100101 11110001 01101111 00100000 01111001 00100000 01110011 01100101 01101100 01100101 01100011 01100011 01101001 01101111 01101110 01100101 00100000 01110101 01101110 00100000 01110100 01100101 01101101 01100001 00100000 01101110 01110101 01100101 01110110 01101111 00101100 00100000 01100011 01100001 01101101 01100010 01101001 01100001 01110010 11100001 01101110 00100000 01101100 01100001 01110011 00100000 01101001 01101101 11100001 01100111 01100101 01101110 01100101 01110011 00101100 00100000 01100111 01110010 11100001 01100110 01101001 01100011 01101111 01110011 00100000 01111001 00100000 01100111 01110010 11100001 01100110 01101001 01100011 01101111 01110011 00100000 01010011 01101101 01100001 01110010 01110100 01000001 01110010 01110100 00100000 01110000 01100001 01110010 01100001 00100000 01110001 01110101 01100101 00100000 01100011 01101111 01101001 01101110 01100011 01101001 01100100 01100001 01101110 00100000 01100011 01101111 01101110 00100000 01100101 01101100 00100000 01101110 01110101 01100101 01110110 01101111 00100000 01110100 01100101 01101101 01100001 00101110 00100000 01000001 01101100 00100000 01100001 01110000 01101100 01101001 01100011 01100001 01110010 00100000 01101100 01101111 01110011 00100000 01100101 01110011 01110100 01101001 01101100 01101111 01110011 00101100 00100000 01101100 01101111 01110011 00100000 01110100 11101101 01110100 01110101 01101100 01101111 01110011 00100000 01100011 01100001 01101101 01100010 01101001 01100001 01101110 00100000 01110000 01100001 01110010 01100001 00100000 01100011 01101111 01101001 01101110 01100011 01101001 01100100 01101001 01110010 00100000 01100011 01101111 01101110 00100000 01100101 01101100 00100000 01101110 01110101 01100101 01110110 01101111 00100000 01110100 01100101 01101101 01100001 00101110 00001010 01000001 01101000 01101111 01110010 01110010 01100101 00100000 01110100 01101001 01100101 01101101 01110000 01101111 00100000 01100101 01101110 00100000 01010111 01101111 01110010 01100100 00100000 01100011 01101111 01101110 00100000 01101110 01110101 01100101 01110110 01101111 01110011 00100000 01100010 01101111 01110100 01101111 01101110 01100101 01110011 00100000 01110001 01110101 01100101 00100000 01110011 01100101 00100000 01101101 01110101 01100101 01110011 01110100 01110010 01100001 01101110 00100000 01100100 01101111 01101110 01100100 01100101 00100000 01110011 01100101 00100000 01101110 01100101 01100011 01100101 01110011 01101001 01110100 01100101 01101110 00101110 00100000 01010000 01100001 01110010 01100001 00100000 01100011 01100001 01101101 01100010 01101001 01100001 01110010 00100000 01101100 01100001 00100000 01100110 01101111 01110010 01101101 01100001 00100000 01100101 01101110 00100000 01110001 01110101 01100101 00100000 01110011 01100101 00100000 01100001 01101010 01110101 01110011 01110100 01100001 00100000 01110101 01101110 01100001 00100000 01101001 01101101 01100001 01100111 01100101 01101110 00100000 01100101 01101110 00100000 01100101 01101100 00100000 01100100 01101111 01100011 01110101 01101101 01100101 01101110 01110100 01101111 00101100 00100000 01101000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01111001 00100000 01100001 01110000 01100001 01110010 01100101 01100011 01100101 01110010 11100001 00100000 01110101 01101110 00100000 01100010 01101111 01110100 11110011 01101110 00100000 01100100 01100101 00100000 01101111 01110000 01100011 01101001 01101111 01101110 01100101 01110011 00100000 01100100 01100101 00100000 01100100 01101001 01110011 01100101 11110001 01101111 00100000 01101010 01110101 01101110 01110100 01101111 00100000 01100001 00100000 01101100 01100001 00100000 01101001 01101101 01100001 01100111 01100101 01101110 00101110 00100000 01000011 01110101 01100001 01101110 01100100 01101111 00100000 01110100 01110010 01100001 01100010 01100001 01101010 01100101 00100000 01100101 01101110 00100000 01110101 01101110 01100001 00100000 01110100 01100001 01100010 01101100 01100001 00101100 00100000 01101000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01100100 01101111 01101110 01100100 01100101 00100000 01100100 01100101 01110011 01100101 01100101 00100000 01100001 01100111 01110010 01100101 01100111 01100001 01110010 00100000 01110101 01101110 01100001 00100000 01100110 01101001 01101100 01100001 00100000 01101111 00100000 01100011 01101111 01101100 01110101 01101101 01101110 01100001 00100000 01111001 00101100 00100000 01100001 00100000 01100011 01101111 01101110 01110100 01101001 01101110 01110101 01100001 01100011 01101001 11110011 01101110 00101100 00100000 01101000 01100001 01100111 01100001 00100000 01100011 01101100 01101001 01100011 00100000 01100101 01101110 00100000 01100101 01101100 00100000 01110011 01101001 01100111 01101110 01101111 00100000 01101101 11100001 01110011 00101110 00001010

ENCRIPTAR EN HEXADECIMAL

45 6c 20 76 c3 ad 64 65 6f 20 70 72 6f 70 6f 72 63 69 6f 6e 61 20 75 6e 61 20 6d 61 6e 65 72 61 20 65 66 69 63 61 7a 20 70 61 72 61 20 61 79 75 64 61 72 6c 65 20 61 20 64 65 6d 6f 73 74 72 61 72 20 65 6c 20 70 75 6e 74 6f 2e 20 43 75 61 6e 64 6f 20 68 61 67 61 20 63 6c 69 63 20 65 6e 20 56 c3 ad 64 65 6f 20 65 6e 20 6c c3 ad 6e 65 61 2c 20 70 75 65 64 65 20 70 65 67 61 72 20 65 6c 20 63 c3 b3 64 69 67 6f 20 70 61 72 61 20 69 6e 73 65 72 74 61 72 20 64 65 6c 20 76 c3 ad 64 65 6f 20 71 75 65 20 64 65 73 65 61 20 61 67 72 65 67 61 72 2e 20 54 61 6d 62 69 c3 a9 6e 20 70 75 65 64 65 20 65 73 63 72 69 62 69 72 20 75 6e 61 20 70 61 6c 61 62 72 61 20 63 6c 61 76 65 20 70 61 72 61 20 62 75 73 63 61 72 20 65 6e 20 6c c3 ad 6e 65 61 20 65 6c 20 76 c3 ad 64 65 6f 20 71 75 65 20 6d 65 6a 6f 72 20 73 65 20 61 64 61 70 74 65 20 61 20 73 75 20 64 6f 63 75 6d 65 6e 74 6f 2e 0d 0a 50 61 72 61 20 6f 74 6f 72 67 61 72 20 61 20 73 75 20 64 6f 63 75 6d 65 6e 74 6f 20 75 6e 20 61 73 70 65 63 74 6f 20 70 72 6f 66 65 73 69 6f 6e 61 6c 2c 20 57 6f 72 64 20 70 72 6f 70 6f 72 63 69 6f 6e 61 20 65 6e 63 61 62 65 7a 61 64 6f 73 2c 20 70 69 65 73 20 64 65 20 70 c3 a1 67 69 6e 61 2c 20 70 c3 a1 67 69 6e 61 73 20 64 65 20 70 6f 72 74 61 64 61 20 79 20 64 69 73 65 c3 b1 6f 73 20 64 65 20 63 75 61 64 72 6f 20 64 65 20 74 65 78 74 6f 20 71 75 65 20 73 65 20 63 6f 6d 70 6c 65 6d 65 6e 74 61 6e 20 65 6e 74 72 65 20 73 c3 ad 2e 20 50 6f 72 20 65 6a 65 6d 70 6c 6f 2c 20 70 75 65 64 65 20 61 67 72 65 67 61 72 20 75 6e 61 20 70 6f 72 74 61 64 61 20 63 6f 69 6e 63 69 64 65 6e 74 65 2c 20 65 6c 20 65 6e 63 61 62 65 7a 61 64 6f 20 79 20 6c 61 20 62 61 72 72 61 20 6c 61 74 65 72 61 6c 2e 20 48 61 67 61 20 63 6c 69 63 20 65 6e 20 49 6e 73 65 72 74 61 72 20 79 20 65 6c 69 6a 61 20 6c 6f 73 20 65 6c 65 6d 65 6e 74 6f 73 20 71 75 65 20 64 65 73 65 65 20 64 65 20 6c 61 73 20 64 69 73 74 69 6e 74 61 73 20 67 61 6c 65 72 c3 ad 61 73 2e 0d 0a 4c 6f 73 20 74 65 6d 61 73 20 79 20 65 73 74 69 6c 6f 73 20 74 61 6d 62 69 c3 a9 6e 20 61 79 75 64 61 6e 20 61 20 6d 61 6e 74 65 6e 65 72 20 73 75 20 64 6f 63 75 6d 65 6e 74 6f 20 63 6f 6f 72 64 69 6e 61 64 6f 2e 20 43 75 61 6e 64 6f 20 68 61 67 61 20 63 6c 69 63 20 65 6e 20 44 69 73 65 c3 b1 6f 20 79 20 73 65 6c 65 63 63 69 6f 6e 65 20 75 6e 20 74 65 6d 61 20 6e 75 65 76 6f 2c 20 63 61 6d 62 69 61 72 c3 a1 6e 20 6c 61 73 20 69 6d c3 a1 67 65 6e 65 73 2c 20 67 72 c3 a1 66 69 63 6f 73 20 79 20 67 72 c3 a1 66 69 63 6f 73 20 53 6d 61 72 74 41 72 74 20 70 61 72 61 20 71 75 65 20 63 6f 69 6e 63 69 64 61 6e 20 63 6f 6e 20 65 6c 20 6e 75 65 76 6f 20 74 65 6d 61 2e 20 41 6c 20 61 70 6c 69 63 61 72 20 6c 6f 73 20 65 73 74 69 6c 6f 73 2c 20 6c 6f 73 20 74 c3 ad 74 75 6c 6f 73 20 63 61 6d 62 69 61 6e 20 70 61 72 61 20 63 6f 69 6e 63 69 64 69 72 20 63 6f 6e 20 65 6c 20 6e 75 65 76 6f 20 74 65 6d 61 2e 0d 0a 41 68 6f 72 72 65 20 74 69 65 6d 70 6f 20 65 6e 20 57 6f 72 64 20 63 6f 6e 20 6e 75 65 76 6f 73 20 62 6f 74 6f 6e 65 73 20 71 75 65 20 73 65 20 6d 75 65 73 74 72 61 6e 20 64 6f 6e 64 65 20 73 65 20 6e 65 63 65 73 69 74 65 6e 2e 20 50 61 72 61 20 63 61 6d 62 69 61 72 20 6c 61 20 66 6f 72 6d 61 20 65 6e 20 71 75 65 20 73 65 20 61 6a 75 73 74 61 20 75 6e 61 20 69 6d 61 67 65 6e 20 65 6e 20 65 6c 20 64 6f 63 75 6d 65 6e 74 6f 2c 20 68 61 67 61 20 63 6c 69 63 20 79 20 61 70 61 72 65 63 65 72 c3 a1 20 75 6e 20 62 6f 74 c3 b3 6e 20 64 65 20 6f 70 63 69 6f 6e 65 73 20 64 65 20 64 69 73 65 c3 b1 6f 20 6a 75 6e 74 6f 20 61 20 6c 61 20 69 6d 61 67 65 6e 2e 20 43 75 61 6e 64 6f 20 74 72 61 62 61 6a 65 20 65 6e 20 75 6e 61 20 74 61 62 6c 61 2c 20 68 61 67 61 20 63 6c 69 63 20 64 6f 6e 64 65 20 64 65 73 65 65 20 61 67 72 65 67 61 72 20 75 6e 61 20 66 69 6c 61 20 6f 20 63 6f 6c 75 6d 6e 61 20 79 2c 20 61 20 63 6f 6e 74 69 6e 75 61 63 69 c3 b3 6e 2c 20 68 61 67 61 20 63 6c 69 63 20 65 6e 20 65 6c 20 73 69 67 6e 6f 20 6d c3 a1 73 2e


PROGRAMA CIFRADO CESAR
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

void menu(int &opcion)
{
                printf("Que desea hacer:\n\n1.-Encriptar\n2.-Desencriptar\n3.-Salir\n\nElige opcion:");
                scanf("%d",&opcion);
}

void pedir(char palabra[1000],int &num)
{
                printf("Introduce la palabra, frase o texto que desees encriptar: ");
                fflush(stdin);
                cin.getline(palabra,1000);
                printf("Introduce el numero de des/codificacion: ");
                scanf("%d",&num);

}

void desencriptar(char palabra[1000],int num)
{
                int i=0;
                while(palabra[i]!='\0')
                {
                               palabra[i]=palabra[i]-num;
                               i++;
                }
                printf("\nLa palabra, frase o texto desencriptado es:\n\n%s\n\n",palabra);
}

void encriptar(char palabra[1000],int num)
{
                int i=0;
                char letra;
                while(palabra[i]!='\0')
                {
                               palabra[i]=palabra[i]+num;
                               i++;
                }
                printf("\nLa palabra, frase o texto encriptado es:\n\n%s\n\n",palabra);
                i=2;
                while(i!=1)
                {
         printf("Deseas (D)esencriptarlo o (C)ontinuar? ");
         fflush(stdin);
                     scanf("%c",&letra);
                     letra = tolower(letra);
         if(letra=='d')
         {
              desencriptar(palabra, num);
              i=1;            
         }
         else if(letra=='c')
         {
              i=1;
         }
         else
         {
              printf("La letra introducida es incorrecta");
         }
    }
}

int main()
{

                char palabra[1000];
                int num,opcion;
                bool i=false;

                system("Title Cifrado Cesar");
                printf("Este programa se basa en el cifrado <cesar>.\n\n");
                while(i!=true)
                {
                               menu(opcion);
                               system("cls");
                               if(opcion==1)
                               {
                                               pedir(palabra, num);
                                               encriptar(palabra, num);
                               }
                               else if(opcion==2)
                               {
                                               pedir(palabra, num);
                                               desencriptar(palabra, num);
                               }
                               else if(opcion==3)
                               {
                                               printf("\t#####################\n\t#programmed by Tr3m0#\n\t#####################\n\n Divide et impera | Veni, vidi, vici.\n\n presiona una tecla para salir.");
                                               fflush(stdin);
                                               getchar();
                                               i=true;
                               }
                }
               
                return 0;

}




COMPILADORES

COMPILADORES 

Los compiladores son programas de computadoras que traducen de un lenguaje a otro, un compilador como su entrada, un programa escrito en lenguaje fuente y produce un programa equivalente escrito en lenguaje objeto.

Un compilador se compone internamente de varias etapas:
Por fases que realizan operaciones lógicas y estos son:

a)       Analizador léxico –Lee la secuencia de caracteres de izquierda a derecha del programa fuente y agrupa las secuencias de caracteres en unidades con significado propio (componentes léxicos o tokens).
Las palabras claves, identificadores, operadores, constantes numéricas, signos de puntuación como separadores de sentencias, llaves, paréntesis, etc., son diversas clasificaciones de componentes léxicos.

ACTIVIDAD: DOS CONCEPTOS MAS DE ANALIZADOR LÉXICO, EJEMPLO Y REPRESENTACIÓN DE SUS COMPONENTES.

Analizador Léxico: lee la secuencia de caracteres del programa fuente, carácter a carácter, y los agrupa para formar unidades con significado propio, los componentes Léxicos. Estos componentes l representan: palabras reservadas: if, while, do, . . . identificadores: asociados a variables, nombres de funciones, tipos definidos por el usuario, etiquetas, ...

Bibliografía: Aho, A.V., Sethi, R., Ullman, J.D. (1990), Compiladores: principios, técnicas y herramientas, Tema 3, páginas: 85-158.

Analizador Léxico:  Divide palabras con significado propio y después las convierte a una secuencia de terminales desde el punto de vista del analizador sintatico. Dicha secuencia es el punto de partida para que el analizador sintáctico construya el árbol sintético que reconoce las sentencias de entrada.

Bibliografia :Compiladores,Traductores y Compiladores con Lex/Yacc , Sergio Galvez Rojas y Miguel Angel Mora Mata (2005).


Este ejemplo tendrá que aceptar cualquier fecha del año 2011, esta fecha tendrá que ser válida (que lleve relación el mes con el día)

ANALIZADOR LÉXICO
TOKENS

LEXEMAS
Mes 1

ENERO
Mes 2

FEBRERO
Mes 3

MARZO
Mes 4

ABRIL
Mes 5

MAYO
Mes 6

JUNIO
Mes 7

JULIO
Mes 8

AGOSTO
Mes 9

SEPTIEMBRE
Mes 10

OCTUBRE
Mes 11

NOVIEMBRE
Mes 12

DICIEMBRE
Año

2011
Día 1

1
Día 2

2
Día 3

3
Día 4

4
Día 5

5
Día 6

6
Día 7

7
Día 8

8
Día 9

9
Día 10

10
Día 11

11
Día 12

12
Día 13

13
Día 14

14
Día 15

15
Día 16

16
Día 17

17
Día 18

18
Día 19

19
Día 20

20
Día 21

21
Día 22

22
Día 23

23
Día 24

24
Día 25

25
Día 26

26
Día 27

27
Día 28

28
Día 29

29
Día 30

30
Día 31

31
ANALIZADOR SINTÁCTICO
G = {Vt, Vn, S, R}
Vt={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,2011,ENERO,FEBRERO,MARZO,ABRIL,MAYO,JUNIO,JULIO,AGOSTO,SEPTIEMBRE,OCTUBRE,NOVIEMBRE,DICIEMBRE }
Vn={Día, Mes, Año, M1, M2, M3,D1, D2, D3 }
Reglas gramaticales
S = Día/Mes/Año | Año/Mes/Día
Mes = M1|M2|M3
M1 = ENERO|MARZO|MAYO|JULIO|AGOSTO|OCTUBRE|DICIEMBRE
M2 = ABRIL|JUNIO|SEPTIEMBRE|NOVIEMBRE
M3 = FEBRERO
Día = D1|D2|D3
D1=1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31|
D2=1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30
D3= 1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28
Año = 2011
Árbol de derivación
Fecha de prueba 16/02/2011




Componentes Léxicos, Patrones y Lexemas


Un token es un par que consiste en un nombre de token y un valor de atributo opcional. El nombre del token es un símbolo abstracto que representa un tipo de unidad léxica; por ejemplo, una palabra clave específica o una secuencia de caracteres de entrada que denotan un identificador.

Un patrón es una descripción de la forma que pueden tomar los lexemas de un token. En el caso de una palabra clave como token, elpatrón es sólo la secuencia de caracteres que forman la palabra clave. Para los identificadores y algunos otros tokens, el patrón es una estructura más compleja que se relaciona mediante muchas cadenas.
• Un lexema es una secuencia de caracteres en el programa fuente, que coinciden con el patrón para un token y que el analizador léxico identifica como una instancia de ese token.