Conjunto finito o infinito de oraciones(frases), cada una de ellas de longitud finita y construidas por la concatenacin de un conjunto finito de elementos(vocabulario)
Lenguaje (Grassmann)
Consiste en un conjunto de frases finito o infinito. Los lenguajes pueden ser especificados enumerando de manera exhaustiva todas sus frases. Sin embargo, para lenguajes infinitos dicha enumeracin no es posible. Cualquier instrumento que especifique un lenguaje debe ser finita. Otras definiciones
Un lenguaje de programacin es una serie de comandos que nos permiten codificar instrucciones de manera que sean entendidas y ejecutadas por una computadora.
Conjunto de smbolos y reglas que permiten la comunicacin con un computador. Lenguaje de programacin (Aho, Lam, Sethi y Ullman)
Los lenguajes de programacin son notaciones que describen los clculos a las personas y las maquinas ESPECIFICACIN DE LENGUAJE La especificacin de un lenguaje de programacin implica la definicin de los siguientes elementos:
El conjunto de smbolos (o alfabeto) que se pueden usar para construir programas correctos.
El conjunto de todos los programas correctos.
El significado de todos los programas correctos LENGUAJE Smbolo Es una entidad abstracta : Ejemplo: A, 7, $, (, etc
Alfabeto ( E ) Cualquier conjunto finito y no vacio de elementos que denominaremos smbolos Ejemplo: E b ={ 0, 1} E v ={ a, e , i , o , u }
LENGUAJE Cadena Secuencia finita de smbolos del alfabeto - Ejemplo: 0, 1, 101, 1100 pertenecen a E b
Longitud de una cadena w Nmero de smbolos que contiene una cadena y se denota por |w| Ejemplo: |1010| = 4 |aeiaa| = 5
Potencia de una cadena Una cadena de i smbolos a se denota por a i
Ejemplo: a 0 = a 1 = a a 2 = aa LENGUAJE Lenguaje (E* ) Es el conjunto de todas las palabras sobre un alfabeto. Ejemplo: E* b ={ , 0, 1, 101, 10,..}
LENGUAJE GRAMATICA Sistemas generativos, donde cada string del lenguaje puede construirse por pasos bien definidos, especificados por las reglas de la gramtica.
Por ejemplo en L = { a n b n /
n > 1 } queremos indicar que las palabras que constituyen el lenguaje son todas las que estan formadas por smbolos a seguidos de smbolos b en igual nmero.
DEFINICION DE GRAMATICA Una gramtica G es una cudrupla
G = ( V n , V t , P, S )
Una G impone una estructura a las frases de un lenguaje
Es el mecanismo empleado para establecer la estructura de un lenguaje, es decir las sentencias que lo forman.
DEFINICION DE GRAMATICA Vt : smbolos terminales o smbolos que aparecen en las frases del lenguaje " Vn : smbolos no terminales o auxiliares P : Conjunto finito de producciones consistente de expresiones de la forma o| donde o y | son cadenas de smbolos, de tal modo que o e (Vn U Vt ) + y |e(Vn U Vt ) * y cuyo significado consiste en que o puede ser sustituido por la parte derecha sea |. S : smbolo inicial que pertenece a Vn G = ( V n , V t , P, S ) GRAMATICA EJEMPLO G= ( Vn, Vt, E, P) Vn={ E } Vt={ +, *, ( , ) , a }
P { E E + E E E * E E ( E ) E a } Anlisis para w = a*( a + a ) E ____ | ___ E * E | | a ( E ) ____ | ____ E + E | | a a TIPOS DE GRAMATICA TIPO 3: Gramatica regular/ racional / Kleene
Las producciones tienen la forma siguiente:
a) Lineales por la derecha
A aB B a con A,B c Vn , a c Vt U { } TIPOS DE GRAMATICA TIPO 3: Gramatica regular/ racional / Kleene
b) Lineales por la izquierda
A Ba B a con A,B c Vn , a c Vt U { } TIPOS DE GRAMATICA TIPO 2: Gramtica Libre del Contexto / algebraicas / incontextuales ( G.L.C)
A o, A c Vn , o c ( Vn Vt ) -
Observacin: Toda gramtica de tipo 3 es tambien de tipo 2 TIPOS DE GRAMATICA TIPO 1: Gramtica Sensible al Contexto / Contextuales
aAb aBb donde A c Vn a, b c (Vn Vt)* B c (Vn Vt)+
Definicion alternativa
a b con | b | > | a | a, b c ( Vn Vt ) +
TIPO 0: Gramtica sin restriccion / Estructura de frase LENGUAJE GENERADO POR UNA GRAMATICA Al lenguaje L generado por una gramtica tipo X, se le conoce como "lenguaje de tipo X".
El lenguaje recibe el nombre del tipo de gramtica ms restringida capaz de generarlo. LENGUAJE GENERADO POR UNA GRAMATICA G 1
S aSa | que es de tipo 2 y tambin por G 2
S aA | A aS que es de tipo 3
Por lo tanto concluimos que el lenguaje es de tipo 3 El lenguaje formado por todas las cadenas de longitud par sobre el alfabeto E={a} se puede formar con las gramticas G : G.L.C La mayor parte de los lenguajes de programacin se representan mediante una gramtica de este tipo.
Estas gramticas suponen una ampliacin sobre las gramticas regulares. Se caracterizan porque sus reglas son de la forma:
r : Vn ( Vn Vt ) -
G.L.C Dada G=( Vn, Vt, P, E) Vn={ E } Vt = { +, *, a, ( , ) } P={ E E+E E E*E E (E) E a }
La secuencia: E E*E E*E+E E*E+ a E* a + a a*a+ a FORMA SENTENCIAL G.L.C Arbol de derivacin E E * E E + E a a a G.L.C. AMBIGUA Una gramtica G es ambigua si hay al menos una cadena en L(G) que tenga dos o mas rboles de derivacin distintos. Ejemplo de gramtica ambigua:
E E+E | E*E | (E) | a G.L.C. AMBIGUA Observemos que la cadena a*a+a puede ser generada por dos rboles de derivacin E E * E E + E a a a E E + E E * E a a a G.L.C. AMBIGUA Recomendacin Para algunos tipos de analizadores sintcticos es preferible que la gramtica no sea ambigua pues si lo fuera, no se podra determinar de manera exclusiva que rbol de anlisis sintctico seleccionar para una frase G.L.C. AMBIGUA Eliminar la ambiguedad Se elimina la ambigedad atendiendo a la precedencia deseada para los operadores. Una gramtica equivalente a la gramtica anterior que no es ambigua es: G=(Vn, Vt, P, E) Vn= { E, T, F } Vt = { + , * , a, ( ,) } P = { E E + T | T T T * F | F F a | ( E ) } G.L.C. RECURSIVA La recursin izquierda es un problema que debe ser resuelto antes que se quiera trabajar con una gramtica para construir un analizador descendente, ya que ste no funcionar si la gramtica la posee. Una gramtica es recursiva por la izquierda si tiene un no terminal A tal que existe una derivacin para alguna cadena o de la forma: A A o , o c ( Vn Vt ) * , A c Vn + ELIMINAR RECURSIVAD Se sustituye AAo| | por las producciones no recursivas por la izquierda
A | A A , A c Vn A o A | a , | c ( Vn Vt ) *
B1 Y A B | X Z B2 X Y Z
En apariencia, esta gramtica no tiene recursin izquierda (ninguna produccin empieza con el no terminal que se est definiendo.
Reemplazando B1 en B2:
B1 Y A B | X Z B2 X Y Z
Tenemos X A B Z |X Z Z Hay recursividad GRAMATICA SIN RECURSION Despus de eliminar la recursividad:
X A B Z X ' X Z Z X ' |
EJERCICIOS Genere una gramtica para los siguientes casos:
1. L= { a N c b M b / N, M 0} genere una G lineal por la derecha 2. L= { aa N c M bd / N, M 0} genere una G lineal por la izquierda
3. L = { a N c b N / N 0}
4. L= { a N b N / N >0} 5. L= { a N b N c N / N >0} 6. L= { a N b M c N+M / N,M >0}
EJERCICIOS 7. L= { a N b N c N d N / N >0}
8. Escriba una G para una linea de declaracion de variables. Por ejemplo:
dato, suma, v88: integer
9. Escriba una G para reconocer una zona de declaracion de variables. Por ejemplo
dato, a, b: integer; cant, x: real; Total: real; EJERCICIOS a) S abB B cb b) SAb ABc B c) S aB Bb BaB B
d) S aBbB BcBA BAaab A a e) SA AB Bab f) S aB B bA A
g) SSa SbS S h) SBbA BbabA AabBA i) SaBb B BbB 10. Para G=(Vn, Vt, P, S) Vn={S, A, B} Vt={a,b,c} Indique los lenguajes que generan cada P SOLUCION L= { a N b N c N / N >0} Vn={ S, R, Q} Vt={ a, b, c } P={ SaSRQ / aRQ QR RQ aRab bR bb bQbc cQcc } S
aSRQ
aaRQRQ
aabQRQ
aabRQQ
aabbQQ
aabbcQ
aabbcc
S
aRQ
abQ
abc LENGUAJE POO A DEFINIR Estructura de un programa en java Declaracin de variables: tipos bsicos(enteros, reales, cadenas), variables, arrays de una dimensin Operadores aritmticos, relacionales, lgicos, separadores Estructuras sentencias o expresiones comentarios De decisin ( if else) bucles (for, while) selectivas (switch) LENGUAJE POO A DEFINIR Tipos abstractos de datos (clase)