54
1

Final Anamim

Embed Size (px)

DESCRIPTION

lenguaje y automatas

Citation preview

NDICE 1. INTRODUCCIN.42. OBJETIVO.53. DEFINICIN DE TRADUCTOR.53.1 ETAPAS DE UN COMPILADOR.63.1.1 ETAPA DE ANLISIS73.1.1.1 ANLISIS LEXICO..73.1.1.1.1 QUE ES EL ANLISIS LEXICO?............................................................73.1.1.1.2 QUE REALIZA EL ANLISIS LEXICO?..................................................83.1.1.1.3 COMO FUNCIONA EL ANLISIS LEXICO?...........................................83.1.1.1.4 QUE SE PUEDE HACER CUANDO OCURRE UN ERROR?...............103.1.1.1.5 CONTRUCCION DE UN LEXICO..113.1.1.1.6 ROL DEL ANALIZADOR LEXICO..143.1.1.1.7 EJEMPLO...153.1.1.1.8 AUTOMATA QUE VALIDA UNA CADENA173.1.1.1.9 LENGUAJE PROGRAMA PROPUESTO(PALABRAS RESERVADAS)..183.1.1.2 ANLISIS SINTACTICO..243.1.1.2.1 GRAMATICA LIBRE DE CONTEXTO253.1.1.2.2 DERIVACIONES Y LEGUAJE DEFINIDO POR UNA GRAMATICA.26 3.1.1.2.3 DERIVACIONES POR LA IZQUIERDA Y DERIVACION POR LA DERECHA273.1.1.2.4 ARBOLES DE ANALISIS GRAMATICAL Y ANLISIS SINTACTICO ABSTRACTOS...283.1.1.2.5 ANLISIS SINTACTICO DESENDENTE..293.1.1.2.5.1 EJEMPLO DE ANLISIS SINT. DESENDENTE..313.1.1.2.6 ANLISIS SINTACTICO ASCENDENTE..333.1.1.2.6.1 EJEMPLO ANLISIS SINT. ASCENDENTE.343.1.1.2.7 DIFERENCIA ENTRE ANLISIS SINTACTICO DESENDENTE Y ASCENDENTE353.1.1.3 ANLISIS SEMANTICO..363.1.2 ETAPA DE SNTESIS..373.1.2.1 GENERACION DE CODIGO INTERMEDIO373.1.2.2 OPTIMIZACION DE CODIGO INTERMEDIO..373.1.2.3 GENERACION DE CODIGO OBJETO.383.1.3 TABLA DE SMBOLOS...393.1.4 MANEJO DE ERRORES403.1.5 HERRAMIENTAS PARA EL DESARROLLO DE COMPILADORES414 CONCLUSIN435 BIBLIOGRAFA44

INTRODUCCIN

El ordenador digital era una mquina que ejecutaba instrucciones en cdigos numricos esos cdigos sealaban a los circuitos de la mquina sus operaciones correspondientes. A esa expresin se le llamo lenguaje maquina la cual lo interpretaba un microprograma, a lo largo del tiempo los usuarios de esos ordenadores descubrieron la ventaja de escribir sus programas mediante claves ms fciles. Esas claves hacen los llamados lenguajes ensambladores.

Despus surgi un lenguaje que permita escribir frmulas matemticas de manera traducible por un ordenador a ese ordenador le llamaron fortran que fue considerado como el primer lenguaje de alto nivel.

A partir de eso fue surgiendo por primera vez el concepto de un traductor. Su definicin fue programa que traduca un lenguaje a otro lenguaje, en el caso de que el lenguaje a traducir es un lenguaje de alto nivel y el lenguaje traducido de bajo nivel a eso se le denomina el trmino compilador

En este trabajo, se introduce el tema de la compilacin describiendo los componentes de un compilador en el entorno en el que trabajan los compiladores y algunas herramientas de software que facilitan la construccin de compiladores.

Un compilador es tambin el anlisis lxico, sintctico y semntico. En este trabajo abordaremos los temas lxico y sintctico. Las etapas del anlisis se dividen en dos partes: anlisis y sntesis. En la etapa de anlisis hablaremos del anlisis lxico y sintctico. El anlisis lxico En el cual la cadena de caracteres que constituye el programa fuente se lee de izquierda a derecha y se agrupa en componentes lxicos y La tarea del analizador sintctico es determinar la estructura sintctica de un programa a partir de los tokens producidos por el analizador lxico.

OBJETIVO

Conocer herramientas utilizadas para la construccin de compiladores y las fases de procesamiento que realiza este lenguaje.

DEFINICIN DE TRADUCTOR

Cdigo fuente: Son las instrucciones que el programador escribe en un lenguaje de programacin.

Traductor: Pasar las instrucciones escritas den un lenguaje de alto nivel a un lenguaje mquina.

Lenguaje mquina: es un conjunto de unos y ceros de una instruccin.

Fig. 1 Funcin de Traductor

Ejemplos de traductores: los intrpretes y los compiladores.

Compilador: es un programa que primero se compila y despus transforma el lenguaje cdigo fuente al lenguaje mquina.

Intrprete: traduce el programa cuando lo lee, convirtiendo el cdigo del programa directamente en acciones.

ETAPAS DE UN COMPILADOR

Las etapas de un compilador se dividen en 2: anlisis y sntesis.

Etapa de anlisis:

Lxico

Sintctico

Semntico

Etapa de sntesis:

Generacin de cdigo intermedio

Optimizacin de cdigo intermedio

Generacin de cdigo objeto

Un compilador opera en fases, cada una de las cuales transforma el programa fuente de una representacin en otra.

En la sig. Figura se muestra una descomposicin tpica de un compilador.

Fig. 2 Etapas de un Compilador

DESCRIPCIN DE LAS ETAPASETAPA DE ANLISIS:

Divide al programa fuente en sus elementos y crea una representacin intermedia del programa fuente. Requiere las tcnicasmsespecializadas.

Esta fase realiza una comprobacin de si el programa fuente, cumple con las reglas de la gramtica del lenguaje de programacin. Normalmente, se suele dividir en tres etapas:

LXICO

Es el anlisis lineal en el cual la cadena de caracteres que constituye el programa fuente se lee de izquierda a derecha y se agrupa en componentes lxicos (tokens en ingls).

Tokens: pueden ser los identificadores, los smbolos de puntuacin, las palabras reservadas.

Lee el programa fuente.

Remueve espacios en blanco, tabulaciones, saltos de lnea.

Remueve comentarios.

Agrupa los caracteres en unidades llamadas tokens.

Qu Es El Anlisis Lxico?

El proceso de anlisis lxico se refiere al trabajo que realiza el scanner con relacin al proceso de compilacin.

El scanner representa una interfaz entre el programa fuente y el analizador sintctico o parser. El scanner, separa el programa fuente en piezas llamadas tokens a travs del examen carcter por carcter del texto. Los tokens representan los nombres de las variables, operadores, etiquetas, y todo lo que comprende el programa fuente.

Es un concepto diferente de compilacin, en si es una fase del proceso de compilacin. Es la primera fase de las 6 que se pueden resumir

Fig. 3 Anlisis y Sntesis

QUE REALIZA EL ANALISIS LEXICO?

La separacin entre anlisis lxico (scanning) y anlisis sintctico (parsing) puede tener tambin otras ventajas. El anlisis lxico de caracteres generalmente es lento en los compiladores, y separndolo del componente de anlisis semntico de la compilacin, el nfasis particular puede darse para hacer ms eficiente el proceso.

Lo que se realiza en esta etapa la lectura del cdigo fuente y la separacin de ese cdigo en tokens para verificar si esos tokens pertenecen al alfabeto del lenguaje.

COMO FUNCIONA EL ANALISIS LEXICO?

El analizador lxico opera bajo peticin del analizador sintctico devolviendo un componente lxico conforme el analizador sintctico lo va necesitando para avanzar en la gramtica. Los componentes lxicos son los smbolos terminales de la gramtica.

Suele implementarse como una subrutina del analizador sintctico. Cuando recibe la orden obtn el siguiente componente lxico, el analizador lxico lee los caracteres de entrada hasta identificar el siguiente componente lxico.

Fig. 4 Funcin de Anlisis Lxico

Un analizador de lxico tiene como funcin principal el tomar secuencias de caracteres o smbolos del alfabeto del lenguaje y ubicarlas dentro de categoras, conocidas como unidades de lxico.

Las unidades de lxico son empleadas por el analizador gramatical para determinar si lo escrito en el programa fuente es correcto o no gramaticalmente. Algunas de las unidades de lxico no son empleadas por el analizador gramatical sino que son descartadas o filtradas. Tal es el caso de los comentarios, que documentan el programa pero que no tienen un uso gramatical, o los espacios en blanco, que sirven para dar legibilidad a lo escrito.

Si existe una lnea de cdigo se lee los caracteres del programa fuente de izquierda a derecha y se agrupan en tokens como se mencion anteriormente, por ejemplo en la siguiente lnea.

If (Contador == 1)

Los va a separar en patrones ya establecidos que se definen en la implementacin del cdigo del compilador pero por lo general se realiza a como se presenta en el siguiente cdigo.

If ( Contador == 1 )

Token

Una vez separados los identificadores se pueden hacer comparaciones para ver si la lnea de cdigo cumple con los requisitos que se requiere, ahora para sustentar el funcionamiento de un analizador lxico se presentaran los siguientes ejemplos:

Fig. 5 Ejemplo Funcionamiento de Analizador Lxico

QUE SE PUEDE HACER CUANDO OCURRE UN ERROR?

Existen 2 mtodos:

MODO PANICO:

Cuando se encuentra un error ignora todos los dems token hasta encontrar un componente bien formado o delimitador.

Fig. 6 Ejemplo Error Modo Pnico

Existe otro mtodo donde s se corrige:

ARREGLAR LA ENTRADA:

Fig. 7 Ejemplo error Arreglar la Entrada

En la terminologa empleada en la construccin de un analizador de lxico se encuentran los siguientes trminos.

Construccin De Un Lxico

Patrn

Descripcin de la forma que han de tomar los lexemas para ajustarse a un componente lxico.

Representa la regla para que una secuencia de caracteres sea considerada cierta unidad de lxico.

Ejemplo: El patrn para un identificador de Pascal es:

Una letra seguida por letras, dgitos o guiones (_)

Fig. 8 Ejemplo de Patrones

Descripcin de Patrones

Un patrn se puede describir:

1.- Mediante una descripcin informal, en donde se emplea el lenguaje natural

Para describir el comportamiento de la regla de lxico. Por ejemplo:

Un nmero entero es una secuencia de uno o ms dgitos del 0 al 9. O un identificador es una letra seguida de letras, dgitos o guiones de subrayar. La descripcin informal es til slo entre humanos; computacionalmente an no hay herramientas para construir sobre ellas analizadores de lxico.

2. Utilizando expresiones regulares. Una expresin regular es una notacin formal que utiliza operaciones sobre el alfabeto de un lenguaje. Por ejemplo, se puede definir que un identificador es:

{Letra} ({Letra} | {dgito} | {guin})*

Que interpreta como un elemento del conjunto letra seguido de cero o ms veces (la cerradura kleene, representada por el asterisco) de una letra, digito o guion (la seleccin representada por la barra vertical).

Esta notacin es forma y computacionalmente til para construir analizadores de lxico empleando la herramienta LEX.

3. Utilizando autmatas finitos (diagramas de transicin o diagramas sintcticos), que son representaciones grficas de las relaciones entre conjuntos de smbolos (aristas) por medio de estados, a los cuales pueden llegarse o transitarse por ellos al encontrar un smbolo perteneciente a un conjunto.

Lexema

Una secuencia de caracteres de entrada que comprenden un solo componente lxico se llama lexema; cadena de caracteres que extrae el componente abstracto del componente lxico.

El valor actual de un conjunto de caracteres que satisfacen un patrn.

Ejemplo:

Este_es_1_ejemplo

Este es el lexema que satisface el patrn de un identificador.

Atributos:Informacin adicional que tiene el token, de utilidad para el anlisis sintctico y semntico.

Token o Ficha

El valor asociado a una categora o unidad de lxico. Se representa como un nmero entero o una constante de un byte.

Smbolos terminales de una gramtica.

Identificadores, palabras reservadas, operadores,...

Varios signos pueden forman el mismo token

Ejemplo: el token de un identificador puede ser 1 id (si id fue definida como 1).

Componentes lxicos (tokens):unidad mnima de informacin que significa algo a la hora de compilar; concepto de palabra; las fases de un lenguaje constan de cadenas de componentes lxicos.

Unidades de lxico

Categoras en que se clasifican las cadenas de caracteres vlidos en un lenguaje. Los caracteres vlidos reciben el nombre de alfabeto. Por ejemplo, el alfabeto de Pascal es:

A-Z, a-z, 0-9, _, =, :, ;, ,, , -, ', ", *, /, (, ), [, ], .,

Y las unidades de lxico para pascal son:

identificadores

literales numricas

operadores aritmticos

cadenas de caracteres

separadores

operadores relacionales

operadores lgicos

comentarios

Con respecto al lenguaje para controlar al ROBOT, tenemos que su alfabeto es:

n,o,r,t,e,s, ,u,i,c

y las unidades de lxico son:

rdenes

(norte, sur, este, oeste, inicio)

y espacios en blanco.

Algunas familias de categoras lxicas tpicas de los lenguajes de programacin son:

Palabras clave Palabras con un significado concreto en el lenguaje. Ejemplos de palabras clave en C son while, if, return. . . Cada palabra clave suele corresponder a una categora lxica.

Habitualmente, las palabras clave son reservadas. Si no lo son, el analizador lxico necesitara Informacin del sintctico para resolver la ambigedad.

Identificadores Nombres de variables, nombres de funcin, nombres de tipos definidos por el Usuario, etc. Ejemplos de identificadores en C son i, x10, valor ledo. . .

Operadores Smbolos que especifican operaciones aritmticas, lgicas, de cadena, etc. Ejemplos de operadores en C son

+, *, /, %, ==, !=, &&. . .

Constantes numricas Literales1 que especifican valores numricos enteros (en base decimal, octal, hexadecimal. . . ), en coma flotante, etc. Ejemplos de constantes numricas en C son

928, 0xF6A5, 83.3E+2. . .

Constantes de carcter o de cadena Literales que especifican caracteres o cadenas de caracteres.

Un ejemplo de literal de cadena en C es "una cadena"; ejemplos de literal de carcter

Son 'x', '\0'. . .

Smbolos especiales Separadores, delimitadores, terminadores, etc. Ejemplos de estos smbolos en C son {, }, ;. . . Suelen pertenecer cada uno a una categora lxica separada.

Hay tres categoras lxicas que son especiales:

Comentarios Informacin destinada al lector del programa. El analizador lxico los elimina.

Blancos En los denominados \lenguajes de formato libre" (C, Pascal, Lisp, etc.) los espacios en blanco, tabuladores y saltos de lnea solo sirven para separar componentes lxicos. En ese caso, el analizador lxico se limita a suprimirlos. En otros lenguajes, como Python, no se pueden eliminar totalmente.

Fin de entrada Se trata de una categora ficticia emitida por el analizador lxico para indicar que no queda ningn componente pendiente en la entrada.

El rol del analizador de Lxico

Aunque el analizador de lxico es la primera etapa del proceso de compilacin, no es quien lo inicia. Pudiera considerarse que el analizador de lxico hace su procesamiento y enva sus resultados al analizador gramatical, como secuencialmente se aprecia en el proceso de compilacin; no es as: La compilacin empieza con el analizador gramatical quien solicita un token para realizar su trabajo; el analizador de lxico rene smbolos y enva el token correspondiente a la unidad de lxico que conform al analizador gramatical y espera una nueva solicitud de token. Como se aprecia en la figura siguiente.

Fig. 9 Rol de Analizador Lxico

Durante estas etapas se tiene comunicacin con la tabla de smbolos que concentra informacin de las entidades empleadas en el programa.

Ejemplos de Anlisis Lxico

Fig. 10 Ej-1 Anlisis Lxico

Fig. 11 Ej-2 Anlisis Lxico

Fig. 12 Ej-3 Anlisis Lxico

Fig. 13 Ej-4 Anlisis Lxico Fig. 14 Ej-5 Anlisis Lxico

Fig. 15 Ej-6 Anlisis Lxico

AUTOMATA QUE VALIDA UNA CADENA

Fig. 16 Automata Finito Determinista-Validacion de Cadena

= {-, +, ., d, e, fdc }

Q= {1, 2, 3, 4, 5, 6, 7, 8}

Q0= {1}

T= {2, 5, 8}

TF= {(1, d, 2), (1,+,3), (1,-,3), (2,d,2), (2,.,4), (4,d,5), (5,d,5), (5,e,6), (6,+,7), (6,-,7), (6,d,8), (7,d,8), (8,d,8)}

Tabla de transicin

Fig. 17 Tabla de Transicion-Validacion de Cadena

Pseudocdigo:

Fig. 18 Pseudocodigo-Validacion de Cadena

LEGUAJE DE PROGRAMACIN PROPUESTO

NETMUA

CARACTERISTICAS GENERALES:

Es un lenguaje de Programacin interpretado,reflexivoyorientado a objetos, fue desarrollado para resolver problemas de diversos Tipos, basados en la programacin; Comparte tambin Funcionalidad con otros lenguajes, Est diseado para la productividad y la diversin del desarrollador, siguiendo los principios de una buena interfaz de usuario.Sostiene que el diseo de sistemas necesita enfatizar las necesidades humanas ms que las de la mquina:

PALABRAS RESERADAS

Fig. 19 Palabras Reservadas

REGLA DE IDETIFICADORES

Los indicadores son nombres que nosotros le asignamos a variables, nombres de mtodos, nombre de clases etc.

Deber empezar con un _

Seguido de una letra o un numero

Podrs utilizar la cantidad de letras o nmeros que desees.

No se pueden incluir smbolos como identificadores

Las palabras reservadas no podrn ser identificadores.

Para Poder Especificar Le Daremos Un Pequeo Ejemplo:

_resultado586

NUMERO

Operador

Descripcin

1

+

Suma

2

-

Resta

3

*

Multiplicacin

4

=

Asignacin

5

==

Comparacin (igual que)

6

!=

Comparacin (diferente de)

7

/

Divisin

8

++

Incremento en uno

9

--

Decremento en uno

10

%

Residuo

11

^

Exponente

12

&

AND

13

|

OR

14

>

Mayor que

15

=

Mayor igual que

17

=y) {

Mostrar (hola mundo);

} No {

Mostrar (hello world);

}

Ciclos.

Ejemplo del ciclo para:

for ( i=0; i