Вы находитесь на странице: 1из 14

Instituto Tecnolgico de Tuxtla Gutirrez

Ingeniera en Sistemas Computacionales Teora De La Computacin

Proyecto COCO-R

Presenta Lpez Maza Jessica Molina Velasco Jaime Guadalupe Morales Ocaa Jos Francisco Rodas Borges Mario Alberto

Tuxtla Gutirrez, Chiapas a 23 de Mayo del 2011

INDICE Introduccin Descripcin del Lenguaje Conjunto de Instrucciones Analizador lxico Introduccin Autmata Finito Determinista Tabla de AnlisisLxico Programa Analizador Sintctico Introduccin Gramtica Libre De Contexto (Con Recursividad) Gramtica Libre De Contexto (Sin Recursividad) Notacin BNF Diagrama De Sintaxis Notacin BNF / COCO R Programa Conclusin

INTRODUCCION El presente proyecto se ha realizado en base a un analizador lxico y sintctico haciendo uso de COCO-R, que es un generador de compilador de lenguaje que proporciona un programa y un escner para el lenguaje creado. Aplicando los conocimientos adquiridos previamente acerca de los autmatas y los lenguajes, hemos creado el lenguaje acerca de un control remoto de televisin indicando las seis principales funciones del antes mencionado.

DESCRIPCION DEL LENGUAJE El lenguaje que manejamos en este proyecto es referente a las funciones bsicas de un control remoto de televisin, donde podemos mencionar que las indicaciones bsicas que se necesitan son las necesarias como encender, subir y bajar volumen as mismo como el cambio de canales y la funcin de men y la de enter para aceptar todos los cambios y modificaciones que se desee realizar en la configuracin de una televisin. CONJUNTO DE INSTRUCCIONES        A Power(cantidad) B Chanel (Digito) C Aumentar Volumen (Cantidad) D Bajar Volumen (Cantidad) EMen (Cantidad) F Direcciones (Arriba, Abajo, Derecha, Izquierda) G Enter (Cantidad)

ANALIZADOR LEXICO INTRODUCCION Analizador lxico (scanner): lee la secuencia de caracteres delprograma fuente, carcter a carcter, y los agrupa para formar unidades con significado propio, componentes lxicos (tokens). Estos componentes lxicos representan:       Palabras reservadas Identificadores Operadores Smbolos especiales Constantes Numricas Constantes de Caracteres

AFD

TABLA DE ANALISIS LEXICO

PROGRAMA #include<stdio.h> #include<ctype.h> #define ESTADOS 24 #define CODIGO 12 unsignedcharCaracter_Act; int Verifica(); intAnalizador_Lexico(); void main() { int Token; printf("Cadena: "); do { Caracter_Act=getchar(); ungetc(Caracter_Act,stdin); Token=Analizador_Lexico(); printf("%d\n"); ungetc(Caracter_Act,stdin); } while(Token != 511); } intAnalizador_Lexico() { unsignedintCodigo; unsignedint Estado=0; unsignedint Salida=0; /*******Tabla de Transicion*******/ staticunsignedintMatriz_de_Transicion[ESTADOS][CODIGO]= { /* Caracter/ L ( ) ; D + - A Ab -><- otro */ /* Estados */ /* q0 */ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 511, /* q1 */ 1, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, /* q2 */ 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, 501, /* q3 */ 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, /* q4 */ 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, /* q5 */ 504, 504, 504, 504, 5, 504, 504, 504, 504, 504, 504, 504, /* q6 */ 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, 505, /* q7 */ 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506,

/* q8 */ /* q9 */ /* q10*/ /* q11*/ };

507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510, 510,

/*********Tabla de Salida***********/ staticunsignedintMatriz_de_Salida[ESTADOS][CODIGO]= { /* Caracter/ L ( ) ; D + - A Ab -><- otro */ /* Estado */ /* q0 */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* q1 */ 500, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* q2 */ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, /* q3 */ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* q4 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, /* q5 */ 5, 5, 5, 5, 504, 5, 5, 5, 5, 5, 5, 5, /* q6 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, /* q7 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, /* q8 */ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, /* q9 */ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, /* q10*/ 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, /* q11*/ 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, }; while (Salida==0) { Codigo=Verifica(); Salida= Matriz_de_Salida[Estado][Codigo]; Estado= Matriz_de_Transicion[Estado][Codigo]; } return Estado; } intVerifica() { Caracter_Act=getchar(); if(isalpha(Caracter_Act)) return 0; else if((Caracter_Act=='(')) return 1; else if((Caracter_Act==')')) return 2; else if((Caracter_Act==';')) return 3; else if(isdigit(Caracter_Act)) return 4;

else if((Caracter_Act=='+')) return 5; else if((Caracter_Act=='-')) return 6; else if((Caracter_Act=='?')) return 7; else if((Caracter_Act=='!')) return 8; else if((Caracter_Act=='>')) return 9; else if((Caracter_Act=='<')) return 10; else return 11; }

ANALIZADOR SINTACTICO INTRODUCCION El anlisis sintctico convierte el texto de entrada en otras estructuras (comnmente rboles), que son ms tiles para el posterior anlisis y capturan la jerarqua implcita de la entrada. Un analizador lxico crea tokens de una secuencia de caracteres de entrada y son estos tokens los que son procesados por el analizador sintctico para construir la estructura de datos. GRAMTICA LIBRE DE CONTEXTO (CON RECURSIVIDAD)         A ->Ap (b); B|B B -> BC (e); C|C C -> Ca (e); D|D D ->Db (e); E|E E ->Em (b); F|F F ->Fd (a, ab, der, izq); G|G G -> Ge (e); H|H H ->

GRAMTICA LIBRE DE CONTEXTO (SIN RECURSIVIDAD) A -> A|       A ->       A ->Ap (b); B|B B ->Bc (e); C|C C -> Ca (e); D|D D ->Db (e) E|E E ->Em (b); F|F F ->Fd (a, ab, der, izq) G|G A A -> BA B -> CB C ->DC D -> ED E ->FE F -> GF

A -> A |       A -> p(b); B A| B -> c(e);C B| C -> a (e);D C| D -> b(e);E D| E -> m(b);F E| F -> d (a, ab, der, iz); GF|

NOTACION BNF <CONTROL REMOTO>::= {<POWER> [<CHANEL>| <VOLUMEN> | <MENU>] } <POWER>::= power(<opcion>); <CHANEL>::=chanel ({ <digito> [<digito>] } ); <opcion>::=on|off <digito>::=0,1,2,3,4,5,6,7,8,9 <VOLUMEN>::= volumen (<accion>); <accion>::={+|-} <MENU>::=menu({ <Direcciones> [<Enter>]}); <direcciones>::= (<arriba> | <izquierda>| <abajo> | <derecha>); <ENTER>::={enter}

DIAGRAMA DE SINTAXIS

NOTACION BNF (COCO-R) CONTROL REMOTO=POWER {(CHANEL| VOLUMEN | MENU)POWER} POWER = power ( opcion) ; CHANEL = chanel{ ( digito) | ( digito ) ;chanel } VOLUMEN =volumen { ( accion ) } MENU= MENU { ( direcciones ) | (enter) } ENTER = enter{ ( enter ) } opcion ={ (ON | OFF) } digito ={ ( 0 | 1 | 2 | 3 |4 | 5 | 6 |7 |8 | 9 ) } accion ={ (+ | -) } direcciones ={ ( arriba | abajo | derecha | izquierda ) }

CONCLUSION A travs de la realizacin de este proyecto mediante el uso de los autmatas finitos deterministas y de los lenguajes lxico y sintctico, de acuerdo a lo anterior y a lo visto en clases hemos creado un lenguaje de un control remoto de

televisin con seis instrucciones bsicas las cuales se han presentado en el trabajo realizando su analizador lxico y sintctico respectivamente. En primera instancia hicimos la construccin del AFD, y la tabla del mismo posteriormente, basndonos en esta informacin creamos el analizador lxico que es el que nos arroja los tokens que es el que indican en qu orden van y si est dentro de la cadena. Creamos as mismo la gramtica libre de contexto y le quitamos la recursividad y la representamos mediante la notacin BNF y lo representamos en diagrama de sintaxis. Posteriormente utilizamos el compilador COCO- R para que nos fuera ms fcil obtener si nuestras instrucciones estaban correctas. De acuerdo a las acciones implementadas hemos logrado comprender la complejidad que trae consigo la realizacin de un compilador, y que se debe tomar en cuenta todas las opciones de vialidad posible, siempre y cuando se busque la eficiencia en los procesos.

Вам также может понравиться