Sei sulla pagina 1di 34

FORMAS NORMALES

DE CHOMSKY

Alondra Cornelio Montejo


Fredy Cardoza Guzman

INTRODUCCIN
Como 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 GRAMTICA

Es 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 FORMALES
Gramtica 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 GRAMTICAS
N. 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 0

Tipo 1

Tipo 2

Tipo 3

TEORA DE AUTMATAS - LENGUAJES


FORMALES
(MQUINAS ABSTRACTAS - GRAMTICAS
FORMALES)
equivale
Gramtica

Mquina

describe

reconoce

genera

genera

Lenguajes

TEORA DE AUTMATAS - LENGUAJES


FORMALES
(MQUINAS ABSTRACTAS - GRAMTICAS
FORMALES)

Gramticas

Lenguajes

Mquinas

Sin restricciones
o de Tipo 0

Sin restricciones
o de Tipo 0

Mquina de
Turing

Sensible al
contexto o de
Tipo 1

Sensible al
contexto o de
Tipo 1

Autmata
linealmente
acotado

Libre de
contexto o de
Tipo 2

Libre de
contexto o de
Tipo 2

Autmata a pila

Regular o de
Tipo 3

Regular o de
Tipo 3

Autmata Finito

MARCELA HERNANDEZ

FORMA 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 tipos
siguientes:
A BC
Aa
Donde 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
gramtica
equivalente en donde las producciones son de de la forma A BC o A a
Antes de aplicar el algoritmo hay que eliminar:
1- producciones
2- producciones unitarias
3- smbolos intiles.

ALGORITMO PARA LLEVAR A LA FORMA


NORMAL DE CHOMSKY
INICIO

Sea A X1 X2 Xm en P
1- Crear producciones del tipo A a adecuadamente
Si Xi es Terminal y Xi = a entonces agregamos a P la produccin Ca
a y remplazamos Xi
por Ca. Entonces todas las producciones son de forma:
A B1B2 Bm y A a
2- Cuando creamos producciones A BC adecuadamente
Para los casos en que m 3, hacemos:
A B1 D1; D1B2D2;, Dm-2 Bm-1 Bm
Agregamos las respectivas variables y producciones
V= V U { D1, D2 Dm-2 }
FIN

EJEMPLO: DADA LA GLC G = ({S,A,B},{A,B},P,S), OBTENER SU FNC

(1)
Aa
S CbA | CaB
A CbAA | CaS |
a
B CaBB | CbS |
b
Ca a
Cb b

(2)
S CbA | CaB
A CbD1 | CaS | a
B CaD2| CbS | b
D1 AA
D2 BB
Ca a
Cb b

FNC no parece tener


aplicaciones
importantes
en
lingstica
natural,
aunque si tiene
aplicacin como una
forma
eficiente
de
comprobar
si
una
cadena pertenece a un
LLC. Los
rboles de derivacin

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 Produccin

Paso 3. Generar Cadenas

Reconocimiento de Cadenas Mediante Autmatas


Lenguaje de Programacin: JAVA

Descripcin:

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 BINARIO


1. Decimal a Binario
2. Binario a Decimal
3. Decimal a Binario en
Punto Flotante
4. Binario 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){

//Intvierte una cadena


private String invert(String str){

try{

String Ax="";
for(int k=str.length()-1;k>=0;k--){

Double.parseDouble(str);

Ax=Ax+str.charAt(k);

return true;
}catch(Exception ex){

}
str=Ax;
return str;

return false;
}
}

if(pe>0){

//Convierte un numero real a binario

while(pe>0){

public String DecDoubleToBin(double


real){

b=pe%2;

System.out.println("DecDoubleToBin:
"+real);

pe=pe/2;
s=s+b;
}

double real2=real;

}else{s=s+""+0;}

String s="";

s=signo+this.invert(s);

String signo="";
int b;
if(real<0.0){

if(pf==0){s=s+".0";}else{
s=s+".";
while(pf>0 && pf<1.0){

real=real*-1;

pf=pf*2;

signo="-";

String sd=""+pf;
if(pf>=1.0){

pf=pf-1.0;
s=s+"1";

int pe=(int)real;
if(real<pe){

}else{
s=s+"0";

pe=pe-1;
}

Potrebbero piacerti anche