formas normales de chomsky

34
FORMAS NORMALES DE CHOMSKY Alondra Cornelio Montejo Fredy Cardoza Guzman

Upload: cornelio-anoniitha

Post on 05-Nov-2015

310 views

Category:

Documents


8 download

DESCRIPTION

automatas

TRANSCRIPT

PowerPoint Presentation

Formas normales de ChomskyAlondra Cornelio MontejoFredy Cardoza GuzmanIntroduccinComo ya conocemos, existen gramticas de muy diferentes formas que generan un mismo lenguaje. Cuando se desea desarrollar demostraciones de ciertas propiedades de los lenguajes incontextuales o se desea desarrollar algoritmos eficientes que operen sobre gramticas incontextuales, interesa imponer ciertas restricciones en las formas de las reglas de la gramtica. Para ello se introducen las definiciones y los algoritmos de obtencin de las formas normales para las gramticas incontextuales. En concreto, vamos a estudiar la conocida como Forma Normal de Chomsky (FNC). El objetivo principal de esta prctica es el estudio e implementacin de los algoritmos que permiten obtener una gramtica incontextual en FNC a partir de una gramtica incontextual sin -reglas ni reglas simples Definicin informal de GramticaEs el mecanismo empleado para establecer la estructura de un lenguaje, es decir las sentencias que lo forman.Consiste de un conjunto de reglas sintcticas que establecen la forma en la que se pueden combinar los smbolos del alfabeto:

ORACION es un SUJETO y un PREDICADO.SUJETO es una FRASE NOMINAL.FRASE NOMINAL es un GRUPO NOMINAL y un CALIFICATIVO que puede o no estar.GRUPO NOMINAL es un ARTICULO que puede no estar y un NOMBRE.CALIFICATIVO es un ADJETIVO o una CONJUNCIN y una ORACION.Gramticas FormalesGramtica regulares.Gramticas independientes de contexto.Gramticas sensibles al contexto.Gramtica sin restricciones o de estructura de frase.Formas Normales de Gramticas Independientes del contexto.

Tipos de GramticasN. Chomsky clasifica las gramticas en cuatro tipos:Gramticas sin restricciones o gramticas de estructura de frases (Tipo 0).Gramticas sensibles al contexto (Tipo 1).Gramticas independientes de contexto (Tipo 2).Gramticas regulares (Tipo 3).Tipo 0Tipo 1Tipo 2Tipo 35Marcela HernandezTeoria de la computacionTeora de Autmatas - Lenguajes Formales(Mquinas abstractas - Gramticas Formales) GramticaLenguajesdescribegeneraMquinareconocegeneraequivaleTeora de Autmatas - Lenguajes Formales(Mquinas abstractas - Gramticas Formales) GramticasLenguajesMquinasSin restricciones o de Tipo 0Sin restricciones o de Tipo 0Mquina de TuringSensible al contexto o de Tipo 1Sensible al contexto o de Tipo 1Autmata linealmente acotadoLibre de contexto o de Tipo 2Libre de contexto o de Tipo 2Autmata a pilaRegular o de Tipo 3Regular o de Tipo 3Autmata FinitoMarcela HernandezForma Normal de Chomsky (FNC)

Ejemplo:

Forma Normal de Chomsky (FNC). Ejemplo.

Forma Normal de Chomsky (FNC) (Chomsky, 1959)Una gramtica GLC, esta en la FNC si cada una de sus producciones es de los tipossiguientes:A BCA aDonde A, B y C son variables (en V) y a es un smbolo Terminal (en T)Teorema: Cualquier GLC sin -producciones puede ser transformada a una gramticaequivalente en donde las producciones son de de la forma A BC o A aAntes de aplicar el algoritmo hay que eliminar:1- producciones 2- producciones unitarias3- smbolos intiles.ALGORITMO para llevar a la Forma Normal de ChomskyINICIOSea A X1 X2 Xm en P1- Crear producciones del tipo A a adecuadamenteSi Xi es Terminal y Xi = a entonces agregamos a P la produccin Ca a y remplazamos Xipor Ca. Entonces todas las producciones son de forma:A B1B2 Bm y A a2- Cuando creamos producciones A BC adecuadamentePara los casos en que m 3, hacemos:A B1 D1; D1B2D2;, Dm-2 Bm-1 BmAgregamos las respectivas variables y produccionesV= V U { D1, D2 Dm-2 }FINEjemplo: Dada la GLC G = ({S,A,B},{a,b},P,S), obtener su FNC(1) A aS CbA | CaBA CbAA | CaS | aB CaBB | CbS | bCa aCb b(2) S CbA | CaBA CbD1 | CaS | aB CaD2| CbS | bD1 AAD2 BBCa aCb b

FNC no parece tener aplicaciones importantes en lingstica natural, aunque si tieneaplicacin como una forma eficiente de comprobar si una cadena pertenece a un LLC. Losrboles de derivacin son binarios.

Generar Cadenas del Lenguaje Gramticas Libres de Contexto en Java

Hice una pequea aplicacin de generacin de cadenas en una gramtica libre de contexto dada por el usuario, es una aplicacin dinmica que permite ingresar los smbolos de la gramtica, smbolos terminales, no terminales con sus producciones, y por supuesto el smbolo inicial.Pasos:

Paso 1. Definir elementos de la Gramtica

Paso 2. Construir Tabla de ProduccinPaso 3. Generar Cadenas

Reconocimiento de Cadenas Mediante AutmatasLenguaje de Programacin: JAVADescripcin:Presentamos una Aplicacin escrita en Java bajo el paradigma de programacin orientada a objetos, que permite construir un autmata dada su tabla de transicin y una vez construido el autmata el sistema puede hacer reconocimiento de cadenas, se le informa al usuario si la cadena fue reconocida o no.

La tabla de transiciones se crea dinmicamente al insertar estados y smbolos, para crear las transiciones se debe hacer click sobre la tabla en la interseccin del estado y el smbolo, luego aparecer una caja de dialogo donde se podrn introducir los estados destino.

Se debe insertar al menos un estado y un smbolo, y crear la transicin para que se construya el autmata en memoria, debe existir un estado inicial y un estado final para poder evaluar cadenas.

Convertidor Decimal - BinarioDecimal a BinarioBinario a DecimalDecimal a Binario en Punto FlotanteBinario en Punto Flotante a Decimal

Codigo Decimal a Binario Utilizado enComplexBinary//Funcin comprueba si el contenido de la cadena puede ser convertido a numero public boolean isNumeric(String str){ try{ Double.parseDouble(str); return true; }catch(Exception ex){ return false; } } //Intvierte una cadena private String invert(String str){ String Ax=""; for(int k=str.length()-1;k>=0;k--){ Ax=Ax+str.charAt(k); } str=Ax; return str;

}

//Convierte un numero real a binario public String DecDoubleToBin(double real){ System.out.println("DecDoubleToBin: "+real); double real2=real; String s=""; String signo=""; int b; if(real0){ b=pe%2; pe=pe/2; s=s+b; } }else{s=s+""+0;} s=signo+this.invert(s); if(pf==0){s=s+".0";}else{ s=s+"."; while(pf>0 && pf=1.0){ pf=pf-1.0; s=s+"1"; }else{ s=s+"0"; } } }