TEMA 5 GRAMÁTICAS Y SINTAXIS

Tamaño: px
Comenzar la demostración a partir de la página:

Download "TEMA 5 GRAMÁTICAS Y SINTAXIS"

Transcripción

1 TEMA 5 GRAMÁTICAS Y SINTAXIS 5.1 Gramáticas independientes del contexto Una gramática es un mecanismo generador de palabras obtenidas en un proceso de derivación. El proceso de derivación en una gramática está enfocado a la obtención de las palabras que genera a través del símbolo inicial de la misma en 0 o más pasos de derivación. Las gramáticas independientes del contexto (o tipo 2) son aquellas cuyas producciones se ajustan a la siguiente forma: A α en donde A N ; α (Σ N)* El término independiente del contexto viene del concepto, que se puede cambiar el símbolo no terminal A por α en cualquier contexto donde aparezca A. La siguiente gramática, es una gramática independiente del contexto (de tipo 2 o de contexto libre): G = ( Σ={a, b, N={S, A, B, S, P ) P: S aabaa, A ε aa, B ε bb Es una gramática que genera las palabras del lenguaje L={ a n b m a l n, l 1 y m 0 Que una gramática sea independiente del contexto, no quiere decir que el lenguaje que genera sea también independiente del contexto (tipo 2) el caso anterior la gramática es independiente del contexto y el lenguaje es regular ( para poder ver mejor los apartados de derivación, he elegido dicha gramática) Derivación Es un proceso enfocado en la obtención de las palabras del lenguaje que genera una gramática Derivación por la izquierda Consiste en aplicar un proceso de derivación al no terminal más a la izquierda S aabaa abaa aaa aa Derivación por la derecha Consiste en aplicar un proceso de derivación al no terminal más a la derecha S aabaa aaba aaa aa Árbol de derivación Es una representación gráfica (en forma de árbol invertido) de un proceso de derivación en una gramática Se define el árbol de derivación como sigue: - la raiz del árbol será el símbolo inicial de la gramática - los nodo interiores del árbol están etiquetados por los símbolos no terminales - las hojas están etiquetadas por símbolos terminales - si un nodo interior etiquetado por A, posee como hijos los nodos etiquetados por X 1,X 2, X n, entonces A X 1,X 2, X n es una producción de la gramática, en donde Xi, representa símbolo terminal o no terminal Sea la siguiente gramática: G=( Σ={a, b, N={S,A,B,S P ) P: S aabaa, A ε aa, B ε bb la construcción de un árbol de derivación en el proceso de la generación de la palabra aa es el siguiente: S a A B A a ε ε ε 1

2 Gramáticas ambiguas Son aquellas en las cuales se pueden generar palabras por más de un árbol de derivación La gramática dada anteriormente es una gramática ambigua: G= ( Σ={a, b, N={S,A,B, S, P) P: S aabaa, A ε aa, B ε bb La generación de la palabra aaa se puede obtener por más de un árbol de derivación. En el momento que existe una palabra que se puede generar por más de un árbol, la gramática se dice que es ambigua S S a A B A a a A B A a a La ambigüedad es un proceso indecidible, no existe un algoritmo para detectarlo y corregirlo Se llama grado de ambigüedad, al número de árboles que puede generar una palabra Lenguaje inherentemente ambiguo Es aquel en que todas las gramáticas que lo generan son ambiguas El siguiente lenguaje es inherentemente ambiguo: L={a n b m c l n=m o m=l; n,m,l 0 Una de las posibles gramáticas que lo genera es la que sigue: G =(Σ={a, b, c,n={s, A, B, C, D, S, P) P: S AB CD, A aab ε, B cb ε, C ac ε, D bdc ε 5.2 Transformación de gramáticas Limpiar una gramática (simplificar una gramática) Limpiar una gramática consiste en quitar los símbolos inútiles e inaccesibles, y en este orden, de lo contrario podrían aparecer nuevamente símbolos inaccesibles y habría que aplicar otra vez el proceso de limpieza. Símbolos inútiles ε Símbolos no terminales a través de los cuales no se genera ninguna palabra perteneciente al lenguaje. Símbolos útiles Símbolos no terminales tales que: A * w ; w Σ* ; A es útil, puesto que en un proceso de derivación se llega a obtener una palabra formada por símbolos terminales (sentencia). Símbolos inútiles=n (conjunto de no terminales) - símbolos útiles Algoritmo para el cálculo de los símbolos útiles: a) El símbolo de la parte izquierda de una derivación directa A w ; w Σ* ; A es útil b) Sí todos los símbolos de la parte derecha de una producción son útiles, el símbolo no terminal de la parte izquierda también lo es B CcA; si A y C son útiles, B también lo es útil c) Repetir proceso anterior hasta que se estén añadiendo símbolos útiles Quitar producciones con símbolos inútiles Ejemplo (limpieza de una gramática): Quitar los símbolos inútiles en la siguiente gramática: G=(Σ={a, b, e,n={s, A, B, C, D, S, P ε P: S ABaC SB ε, A aab bb, B Ea bb ε, E Ee ε ε a 2

3 Aplicando el algoritmo, son símbolos útiles={s,b,a, quitando las producciones con los símbolos inútiles queda la siguiente gramática: G=(Σ={a, b, e,n={s, A, B, S, P S SB ε, A aab bb, B bb ε Símbolos inaccesibles Símbolos terminales y no terminales a los que no se llega a través del símbolo inicial en un proceso de derivación Son símbolos accesibles: S * αaaβ; α,β (Σ N)*; a, A y S son accesibles Símbolos inaccesibles = (Σ N) - símbolos accesibles Algoritmo del cálculo de los símbolos accesibles: a) El símbolo inicial es accesible S w ; S es accesible b) Los símbolos que tengan como parte izquierda de la producción el símbolo inicial son accesibles S AcB ; A,c y B son accesibles c) Para los símbolos no terminales que son accesibles y son parte izquierda de una producción, los símbolos de su parte derecha son accesibles A DeF; si A es accesible D,e y F son accesibles d) Repetir proceso anterior hasta que se estén añadiendo símbolos accesibles Quitar producciones con símbolos inaccesibles Ejemplo: Quitar los símbolos inaccesibles en la siguiente gramática: G=(Σ={a, b,n={s, A, B,S,P) P: S SB ε, A aab bb, B bb ε Aplicando el anterior algoritmo, son símbolos accesibles {S, B, b, quitando los símbolos inaccesibles queda la siguiente gramática: G=(Σ={b,N={S,B,S,P) P: S SB ε, B bb ε La gramática anterior es una gramática limpia (blanca o simplificada) Factorización de prefijos comunes Dos o más producciones tienen prefijos comunes cuando teniendo igual parte izquierda su parte derecha comienza por la misma subpalabra A δα 1 δα 2 δ n β 1 β 2 β m ; n 2, m 0, δ (N Σ) + α i, β j (N Σ)* Eliminación de prefijos comunes A δa β 1 β 2 β m, A α 1 α 2 α n Ejemplo: gramáticas que generan el lenguaje L={ ba n, n 0 Con prefijos comunes: G 1 =(Σ={a, b,n={a, A,A,P ) P: A ba b, A aa ε Sin G 2 =(Σ={a, b,n={a, R, A, P ) P: A br, R A ε, A aa ε A A A b A b R fig1 b fig2 fig3 La figura 1 y 2 son posibles árboles de derivación en la construcción de palabras que empiezan por el símbolo b en G 1, mientras que la generación de las mismas palabras en G 2, sólo se pueden obtener por el árbol de la figura 3. 3

4 Recursión en una gramática Una o más producciones de una gramática tienen recursión por la izquierda, cuando existen uno o más símbolos en la parte derecha de la producción que coinciden con el símbolo no terminal de la parte izquierda A α 1 Aα 2 β 1 β 2 β m n>0, m>0 α i (N Σ) +, β j (N Σ)* Recursión inmediata por la izquierda Una o más producciones de una gramática tienen recursión inmediata por la izquierda, cuando el primer símbolo de la parte derecha de la producción coincide con el símbolo no terminal de la parte izquierda A Aα 1 Aα 2 Aα n β 1 β 2 β m n>0, m>0 α i (N Σ) +, β j (N Σ)* Eliminación de la recursión inmediata por la izquierda A A β 1 A β 2 A β m, A α 1 A α 2 A Aα n A ε Ejemplo de gramáticas que generan el lenguaje L={ ba n, n 0 Con recursión inmediata por la izquierda G 1 =(Σ={a, b,n={a, A, P) P: A Aa b Sin G 2 =(Σ={a, b,n={a, A, A, P) P: A ba, A aa ε A A A A a b A fig1 b fig2 fig3 La figura 1 y 2 representan los árboles de derivación en la generación de las palabras que empiezan por el símbolo b en G 1, mientras que la figura 3 representa el árbol de derivación en la generación de las palabras que empiezan por el símbolo b en G 2 Eliminación de producciones vacías A nivel teórico es interesante incorporar las transiciones vacías a efectos de desarrollo y transformación de algoritmos, pero a nivel práctico no es muy usual ya que la mayoría de los lenguajes no contienen la palabra vacía, por lo que no es necesario incorporarla a no ser que contenga la palabra vacía. Cualquier lenguaje que no contenga la palabra vacía, puede encontrarse una gramática sin producciones vacías que lo genere. Los siguientes pasos eliminan las producciones vacías de gramáticas cuya parte izquierda es un símbolo no terminal. - Determinar los símbolos anulables un símbolo A es anulable A α si α *ε - Incluir en un conjunto de producciones P todas las producciones de P menos las producciones vacías - Si la producción A αbβ está en P y B es anulable, entonces añadir a P la producción A αβ ( excepto si es una producción vacía anulable) - Repetir el apartado anterior, hasta que no se pueden añadir más producciones al conjunto P - Si el símbolo inicial tiene la producción vacía S ε se le añade una nueva producción de la forma S ε S Sean las producciones correspondiente a una gramática P: S asab ε A aab ε B bb ε - Símbolos anulables = {S, A, B - P : { S asab, A aab, B bb - por ser S, A, B anulables, a P se la añaden: S asb, S aab, A aa, A ab, B b S ab, A a - Por tener el símbolo inicial la producción vacía se añade: S ε S 4

5 5.3 Autómatas de pila (AP) Es un modelo que simula una máquina abstracta que acepta (o reconoce) las palabras de un lenguaje independiente del contexto. Para los autómatas de pila el mecanismo de control de evolución necesita de una memoria que mantenga la lógica de la estructura de las palabras a reconocer, en este caso basta con una memoria tipo pila < entrada > <-----x ---> a a b Control de estados Estado δ A B # pila Estado(s Función de transición Las palabras que reconoce este tipo de autómatas son lenguajes cuyas palabras tienen una estructura equilibrada, es decir la historia de una parte de la palabra afecta a otra parte de la misma. Son lenguajes de tipo 2 (lenguajes independientes del contexto). En su proceso es necesario una terna relacionada (estado, entrada, memoria), donde el estado se relaciona con la entrada en la cual sólo se permite leer y avanzar símbolo a símbolo y, la memoria en la que se permite, apilar un número determinado de símbolos o desapilar solamente un símbolo. Situación de un AP: corresponde a la terna ordenada de la forma (q i, ax, AB..#) donde: q i es el estado actual del AP, a es el símbolo señalado para leer y, x es la cadena que resta por leer en ese momento y A es el símbolo que está en la cima de la pila, Situación inicial: ( q 0, ax, #); q 0 estado inicial, a es el símbolo señalado para leer y, x es la cadena que resta por leer en ese momento y # es el símbolo base de la pila, ax es cadena de entrada a reconocer por el AP Situación final o de aceptación : ( q f, ε, α) ; q f es el estado final, ε la cadena ha sido aceptada ha llegado a leer toda la palabra y terminamos en un estado de aceptación y, α situación de la pila Movimiento: es el paso de un estado a otro, (q i, x, α 1 ) (q j, y, α 2 ) (q i, a, A) (q j, B) Sea x=ay, a Σ, α 1, α 1 Г* (q i, x=aab, α 1 =AA# ) (q j, y=ab, α 2= BA#) Definición formal AP Un APD (autómata de pila determinista) se define por una septupla AP=(Σ, Q, Г, δ, q 0, #, F), donde: - Σ : alfabeto de las palabras a reconocer por el autómata - Q: conjunto de estados, es un conjunto finito no vacío - Г: alfabeto de los símbolos de la pila - δ: Q x Σ U{ε,$xГ PxГ*, en donde P Q función de transición, que transforma la terna ordenada (qi, a, A) (qj, α ) - q 0 Q, estado inicial (estado de partida) - # : símbolo de la base de la pila - F Q: conjunto de estados finales o de aceptación 5

6 Significación de una función de transición (q i, a, A) (q j, α) q i - estado actual del autómata a - símbolo leído de la entrada, puede que no se lea de la entrada en cuyo caso aparecerá ε A- elemento que se quita de la cima de la pila, puede que no se quite nada de la pila ε qj- estado destino del autómata α - elementos a poner en la pila. Puede que no se ponga nada en la pila, en cuyo caso se pone ε Tanto la lectura de la entrada, como el elemento a desapilar, como los elementos a apilar pueden ser vacíos (ε), en cuyo caso indican que no se lee de la entrada, que no se quita de la pila o que no se pone nada en la pila respectivamente. Ejemplo: dado el siguiente lenguaje L = {a n b n n >0, especificar un AP que lo reconozca: Hay que buscar una lógica para ayudarnos con la pila y así hacer un seguimiento y control de la palabra. Para el ejemplo anterior la lógica a aplica podría ser: cómo el número de aes es igual al número de bes, se podrá apilar las aes mientras que vengan las aes, cuando finalicen las aes llegarán las bes, que deben ser igual a las aes, se desapilan las aes a la vez que se leen las bes, el final se encontrará cuando el fin de palabra representado por $ coincida con la base de la pila representado por #. AP= ( Σ={a, b, Q={ q 0, q 1, q 2, Г={A, #, δ, q 0, #, F={ q 2 ) δ(q 0, a, #) (q 0, A#) - lee a, desapila # y apila A#, no se cambia de estado δ(q 0, a, A) (q 0, AA) - lee a, desapila A y apila AA, no se cambia de estado δ(q 0, b, A) (q 1, ε) - lee b, desapila A y no apila nada, se cambia de estado δ(q 1, b, A) (q 1, ε) - lee b, desapila A y no apila nada, no se cambia de estado δ(q 1, $, #) (q 2, ε) - lee $, desapila # y no apila nada, se cambia de estado La palabra ha finalizado, la pila está vacía y/o estamos en un estado final si se dan estas condiciones la palabra es reconocida Representación gráfica de los AP Para mejorar la legibilidad y visibilidad de los autómatas se pueden utilizar dos tipos de representaciones gráficas, al igual que los autómatas finitos: los diagramas de transición o las tablas de transición: Diagramas de transición La representación por medio diagrama de transiciones, es un grafo dirigido, en el que: - Los nodos se representa por un círculo, que se etiquetan con los estados q Q - Habrá arcos etiquetados con el símbolo de lectura, una coma que lo separa del símbolo que se desapila, un punto y coma que lo separa de los símbolos que se quieren apilar; así desde el nodo qi al qj, si existe la función δ(qi, a, A) (qj, BB). El arco será : a, A; BB - El estado inicial tiene un arco entrante no etiquetado - Los estados finales q f F se señalan por doble círculo, en los AP pueden que no exista n estados finales Ejemplo de un AP representado por un diagrama de transición, que reconoce el lenguaje L = {a n b n n>0 a,a ;AA a,#,a# b,a;ε q 0 q 1 q 2 b,a;ε $,#; ε fig1 6

7 Tablas de transición Representación tabular que relaciona los componentes: entradas, estados y pila - Cada fila corresponde a un estado q Q - Cada columna corresponde al símbolo de entrada a Σ ε y al símbolo de la cima de pila A Г ε - La fila asociada al estado inicial tiene una - Las filas asociadas a los estados finales de existir tienen el símbolo * En la posición (q, (a, A)), q Q, a Σ y A Г está el estado y los elementos a apilar que determine la función δ(q, a, A) en este caso (p, α) q Q y α Г* AFD representado por una tabla de transición que reconoce el lenguaje L = {a n b m n,m>0 Entrada, pila Estados a, A a,# b,a b,# $,# ε, B A, ε B, ε q 0 q 0, AA q 0, A# q 1, ε q 1 q 1, ε * q 2 q 2, ε Lenguaje reconocido por un autómata de pila El lenguaje que reconoce un AP será: el conjunto de palabras que partiendo de una situación inicial, se llega a una situación final en cero o más movimientos. En los AP existen dos formas de reconocimiento de los lenguajes: - Reconocimiento por llegada a estado final Lenguaje={ x x Σ*, (q i, x, #) *(q f,ε, α), q f F, α Г* AP Ejemplo: L = {a n b m n>=m; n, m>0 AF= (Σ={a, b, Q={ q 0, q 1, q 2 Г={A, #, δ, q 0, #, F={ q 2 ), δ(q 0, a, #) (q 0, A#), δ(q 0, a, A) (q 0, AA), δ(q 0, b, A) (q 1, ε) δ(q 1, b, A) (q 1, ε), δ(q 1, $, a) (q 2, ε) a,a ;AA b,a ;ε a,#,a# q 0 q 1 q 2 b,a ;ε $,A; ε fig2 (q 0, x=aab$, # ) (q 0,ab$, A#) (q 0,b$, AA#) (q 1,$,A#). (q 2,ε, #) - Reconocimiento por llegada vaciado de pila Lenguaje={ x x Σ*, (q i, x, #) *(q j, ε, ε) AP L = {a n b m n>=m; n, m>0 a,a;aa b,a ;ε a,#,a# $,A;ε ε,#; ε q 0 q 1 ε,a; ε b,a; ε AF= (Σ={a, b, Q={ q 0, q 1 Г={A, #, δ, q 0, #, F={ q 1 ), δ(q 0, a, #) (q 0, A#), δ(q 0, a, A) (q 0, AA), δ(q 0, b, A) (q 1, ε) δ(q 1, b, A) (q 1, ε), δ(q 1, $, #) (q 1, ε) (q 0, x=aab$, # ) (q 0, ab$, A#) (q 0, b$, AA#) (q 1,$, A#) (q 1, ε, #) (q 1, ε, ε) Todos los lenguajes independientes del contexto pueden ser reconocidos por AP tanto por vaciado de pila como llegada a estado final fig3 7

8 5.3.3 Autómatas de pila deterministas APD Un autómata de pila es determinista APD cuando para cualquier situación sólo puede darse como mucho un movimiento, para ello debe cumplir las siguientes condiciones: q Q, A Г y a Σ (q i, a, A ) < 2 q Q y A Г (q i, ε, A ) < 0 q Q y a Σ (q i, a, ε ) < 0 Ejemplo: L= {a 2n b n n >0, APD por vaciado de pila que reconozca el anterior lenguaje a,a ;AA a,#,a# $, # ;ε b, A ;ε q 0 b,a ;ε q 1 ε,a; ε q 2 fig Autómatas de pila no deterministas APND Un autómata de pila es no determinista APD cuando existe alguna situación que puede darse más de un movimiento. Se pueden dar tres situaciones de no determinismo que veremos a continuación: 1) (q i, a, a) {(q j, α1) (q k, α2 ),.. Ejemplo: L= {a n b m n<>m; n,m>0 a,a;aa b,a;ε q 2 a,#;a# q 1 b,a;ε $,a;ε q 2 q 0 $,# ;ε 2) (q i, a, a) (.) (q i, ε, a) (.) a,# ;a# b,a ;ε b,# ;# fig4 q q 2 q 2 1 Ejemplo: L= {a n b m n>= m ; n,m>=1 a) reconocimiento por vaciado de pila a,a ;aa b,a ;ε a,# ;a# $,#; ε ε,a ;ε q 0 b,a ;ε q 1 a,a;aa b,a;ε b,#;# (q 0, aab$, # ) (q 0, ab$, a#) (q 0, b$, aa#) (q 1,$, a#) (q 1, ε, #) (q 1, ε, ε) (q 0, aaabb$, # ) (q 0, aabb$, a#) (q 0, bb$, aaa#) (q 1,b$, aa#) (q 1, b$, a#) (q 1, b$, #) b) reconocimiento por llegada a estado final fig5 a,a ;aa b,a ;ε a,#a# $,# ; ε q 0 b,a ;ε q 1 $,a; ε q 2 fig6 8

9 3) (q i, a, a) (.) (q i, a, ε) (.) Ejemplo: L= {a n b m n<=m, n,m>=1 a) reconocimiento por vaciado de pila a,a ;aa b, a ;ε a,# ;a# $, # ;ε b, ε ;ε q 0 b,a ;ε q 1 fig. 7 b) reconocimiento por llegada a estado final a,a ;aa b,a ;ε a,# ;a# b,# ;# q 0 q 1 q 2 b,a ;ε $,#; ε fig Comparativa entre los AP En los autómatas de pila no existe una equivalencia entre los deterministas y no deterministas, como ocurre con los autómatas finitos. Puesto que los no deterministas tienen un mayor poder de reconocimiento que los deterministas. Mientras los no deterministas pueden reconocer todos los lenguajes independientes del contexto, los deterministas no, los deterministas son un subconjunto de los no deterministas, por lo tanto no puede existir un algoritmo de transformación, como ocurre con los AF. Al igual que ocurre con los AF, la implementación de los deterministas es preferible a los no deterministas, es más directa y rápida. Cualquier lenguaje regular puede ser reconocido por un autómata de pila determinista APND-L tipo-2 APD-L tipo-2 AF-L tipo-3 Ejemplo: Lenguaje de tipo 2 que no puede ser reconocido por un APD L={ x x -1 x {a,b* No se puede saber cuando finaliza la subpalabra x y empieza la subpalabra x -1 a,b;ab a,a ;aa b,b ;ε a,#a# $,#; ε a,a ;ε q 0 a,a :ε b,b ;ε q 1 b,# ;b# b,a ;ba b,b ;bb $,# ;ε fig9 9

10 Ejemplo de un lenguaje de tipo 3 con un reconocimiento por vaciado de pila L= {a n b m n,m>=1 lenguaje de tipo 3 que puede ser reconocido por un APD a, # ; # b,# ;# $,# ;ε q 0 q 1 a, # ;# b,# ;# fig10 AP a b q 2 AF q 0 q 1 a b Fig Transformación de gramática independiente del contexto a autómata de pila Dada la gramática G =(Σ={a, b, N={S, A, S, P) P: S aa A Sb b construir un AP que reconozca el lenguaje que genera la gramática G. Proceso de transformación, consiste en los siguientes pasos 1) Poner el símbolo inicial en la pila - (ε,#;s#) 2) Para cada producción A α sustituir parte izquierda por parte derecha - (ε,a; α) 3) Para cada símbolo del alfabeto de la gramática aєσ poner - (a,a;ε) 4) Poner la transición para que el reconocimiento sea por vaciado de pila - ($,#;ε) q 0 ε,#;s# q 1 q 2 ε,s;aa ε, A; Sb ε,a; b a,a;ε b,b; ε $,#;ε a S S S $ A b Reconocimiento de la palabra x=aabb (q 0,aabb$,#) (q 1,aabb$,S#) (q 1,aabb$,aA#) (q 1,abb$,A#) (q 1,abb$,Sb#) (q 1,abb$,aAb#) (q 1,bb$,Ab#) (q 1,bb$,bb#) (q 1,b$,b#) (q 1,$,#) (q 1,ε,ε) Dada la gramática G =(Σ={a,b,N={S,A,S,P) P: S aab A ab equivalente a la dada en el párrafo anterior, construir un AP que reconozca el lenguaje que genera la gramática G. q 0 ε,#;s# q 1 ε,s;ab a,a;ε $,#;ε ε, S, asb b,b; ε a A b Reconocimiento de la palabra x=aabb (q 0,aabb$,#) (q 1,aabb$,S#) (q 1,aabb$,ab#) (q 1,abb$,b#) (q 1,aabb$,aSb#) (q 1,abb$,Sb#) (q 1,$,#) (q 1,ε,ε) En este caso el proceso tiene el problema de no ser determinista S S S a a b a S b a S b a b a b S 10

11 Ejercicios de gramáticas de tipo 2 y autómatas de pila Obtener una gramática para cada uno de los siguientes lenguajes: 1. = {a, b, c, L = {a n b m c n n, m >= 1 2. = {a, b, c, L = {a n b m c n+2m n >=0, m >= 1 3. = {a, b, c, L = {a n b n+m c m n >= 1, m >= 0 4. = {a, b, L = {a n b m n >= m >= 1 5. = {a, b, L = {a n b m n > m >= 0 6. = {a, b, c, L = {a m b n c k m > n + k ; n, k >=0 7. = {a, b, L = { a n b m m <= n <= 2m ; n, m >=0 8. = {a, b, L = { a n b m n <>m ; n, m >0 9. L = { v w v (ab) +, con w (a b) + y con v w 10. = {a, b, c, L = {a n b m c k n es un número par, posiblemente el 0, k es un número impar y m > k+n 11. ={a,b, L={a 2n b n n>0 U {a n b 2n n> = {a,b,c, L = { xcy x,y {a,b* en donde x =2 y 13. Sea el alfabeto Σ = {a, b se considera el lenguaje de las palabras que tienen al menos dos símbolos b y que cumplen la propiedad de que el número de símbolos a que hay antes de la primera b es estrictamente mayor que el número de símbolos a que hay después de la última b. Por ejemplo, pertenecen a este lenguaje: aaabbaa, aabb, abbb, aabababaaba. no pertenecen: abaabaa, baaba, bab. 14. Dado el alfabeto Σ= {a, b sea el lenguaje: L = { vbbw v, w {a,b* y v >= w (la longitud de v es mayor o igual que la de w) 15. Dado el alfabeto Σ= {a, b y, sea el lenguaje L = { vw en donde v, w {a,b * y v = w. 16. Con el alfabeto ={a,b,c se define el lenguaje L = {w c n w pertenece a {a,b +, n>0 en el que además se cumple que: a. si w termina en a, entonces la longitud de w es mayor o igual que n b. si w termina en b, entonces la longitud de w es menor o igual que n Ejemplos de palabras del lenguaje: abbacc, aaaccc, abccc, bbbabccccc Ejemplos de palabras que no son del lenguaje: abbaccccc, aaacccccccc, abc, bbbabccc 17. Dado el alfabeto Σ={a,b,0,1, sea el lenguaje L={w (0 1) v v,w pertenecen a {a,b + y w = v, en el que además se cumplen las siguientes restricciones: a. Si el dígito central es 0, w deberá empezar por a b. Pero si el dígito central es 1, entonces es v quien empezará por a. Ejemplos de palabras válidas: aba0bba, a0a, a0b, a1a, b1a, abb1abb Ejemplos de algunas palabras no válidas: b0a, ba0aa, a1b, ba1ba 18. Dado el alfabeto = {a, b, c, sea el lenguaje L = {wc n w {a, b * ; n = número de subcadenas ab de w ; n>= 0 Es decir, el número de símbolos c del final coincide con el número de subcadenas ab que tiene la palabra al principio, es decir, en w (teniendo en cuenta que en w puede haber cualquier combinación de símbolos a y b) 11

12 Ejercicios de autómatas de pila 1. Justificar si las siguientes dos transiciones de un autómata a pila suponen no determinismo: ( q 0, a, b ) = ( q 2, ab), ( q 0, a, ε ) = ( q 1, a) 2. Sea el siguiente autómata a pila con reconocimiento por vaciado de pila: δ(q 0, a, #) = (q 0, a#), δ(q 0, a, a) = (q 0, aa), δ(q 0, b, a) = { (q 1, ε), (q 2, ε) δ(q 1, b, a) = (q 1, ε), δ(q 1, $, #) = (q 1, ε) δ(q 2, ε, a) = (q 3, ε) δ(q 3, b, a) = (q 2, ε), δ(q 3, $, #) = (q 3, ε) Determinar el lenguaje reconocido por el mismo. 3. Dado el siguiente autómata de pila AP 1 que realiza el reconocimiento por vaciado de pila: AP 1 a,ε;a b,a;ε q0 q2 q3 q1 q2 b,a; ε q1 $,#;ε b,a;ε ε,a; ε $,#;ε b,a;ε Se pide: Obtener el lenguaje reconocido por el mismo. 4. Dado el alfabeto = {a, b, sea el lenguaje L = {a n b n n >= 0. Encontrar un autómata de pila que reconozca el lenguaje complementario de L. Considerar que todas las palabras vienen finalizadas por el símbolo $. 5. Dado el alfabeto Σ= {a, b, sea el lenguaje L = { a n b m n > m; n, m > 0.Encontrar un autómata a pila (AP) que reconozca L* (L estrella). Se pide: Sin aplicar ningún algoritmo, es decir, partiendo de la definición del lenguaje, obtener el diagrama de transiciones de un autómata a pila (AP) que lo reconozca. xplicar si el AP es determinista o no. 6. Sea la siguiente gramática de contexto libre sobre el alfabeto Σ = { (, ) S ---> ( ) ( S ) ( ) S ( S ) S que genera todas las expresiones posibles de paréntesis equilibrados, es decir, que cumplen las siguientes condiciones: Tienen igual número de símbolos ( que de símbolos ). Cualquier prefijo de la expresión tiene un número de símbolos ( mayor o igual que de símbolos ). Es decir, en un punto de la expresión puede haber un número indeterminado de paréntesis de cerrar pendientes, pero no de paréntesis de abrir. Por ejemplo, son válidas las expresiones : ( ), ( ) ( ), ( ( ) ( ) ), ( ( ) ( ) (( ) ) ). Se pide: Sin aplicar ningún algoritmo, es decir, partiendo de la definición del lenguaje, obtener el diagrama de transiciones de un autómata a pila (AP) que lo reconozca. Explicar si el AP es determinista o no. 12

13 TEMA 6 - IMPLEMENTACIÓN DE LA SINTAXIS 6.1 Especificación sintáctica de un lenguaje en notación BNF y EBNF (BNFA) Todas las características sintácticas de un lenguaje de programación se pueden especificar mediante una gramática independiente del contexto. Especificación que se puede escribir en notación BNF o EBNF (BNFA) Notación BNF La notación BNF suele usarse para describir sintácticamente lenguajes de programación. Se remonta al año 60, en que John Backus la usó para describir el lenguaje Algol. De hecho, es el acrónimo de Backus Naur Form, en homenaje a la destacada contribución de Jhon Backus (coordinador del grupo que desarrolló el lenguaje FORTRAN), y de Peter Naur (coordinador del grupo que desarrolló el lenguaje Algol) al diseño de lenguajes de programación. Esta notación consiste en representar de una manera significativa las gramáticas, con la siguiente representación: - Los símbolos no terminales se representan por cadenas significativas delimitadas por los símbolos < y > que definen una secuencia de símbolos terminales - Los símbolos terminales se representan por cadenas de símbolos que se representan asi mismo - El símbolo ::= es el separador de la parte izquierda de la parte derecha Ejemplo - de una gramática representada en notación BNF que genera uno o más números separados por el símbolo, Un numero está formado por uno o más dígitos y puede estar precedido por el símbolo -. <lista_numeros>::<numero>, <lista_numeros> <numero> <numero> ::= <signo> <valor_numerico> <signo> ::= - ε <valor_numérico> ::= digito <valor_numerico> digito Notación EBNF Para hacer más simple y legible las gramáticas escritas en notación BNF se creó la notación EBNF (o BNFA), que permiten simplificar las representaciones de las definiciones de agrupación, opcionalidad y repetición, definiciones que se dan con bastante frecuencia, en la especificación sintáctica de la gramática que genera un lenguaje de programación. En dicha notación se emplean los metacaracters siguientes: - Cuando una subpalabra de la parte derecha de una producción, se puede dar o no, dicha subpalabra se delimita por los símbolos corchetes [] - Cuando una subpalabra de la parte derecha de una producción, se puede dar 0 ó más veces, dicha palabra se dilimita por los símbolos llaves { - Cuando una subpalabra de la parte derecha de una producción, se puede dar entre una serie de alternativas, dicha palabra se dilimita por los símbolos paréntesis () Ejemplo de la gramática anterior escrita en notacion BNFA <lista_numeros>::= <numero> {, <numero> <numero> ::= [-] digito { digito Ventajas del uso de las anteriores notaciones - Se definen las gramáticas de una forma precisa y fácil de comprender - Existen grupos de gramáticas donde se puede construir de forma directa un AS (analizador sintáctico) - Existen herramientas que a partir de la descripción de la gramática se puede generar código de forma autómatica de un analizador sintáctico - En futuras modificaciones es más fácil ralizar a través de las estructuras gramáticales 13

14 Ejemplos de gramáticas escritas en notación BNF y EBNF - Gramática en notación BNF que define la sintaxis de las declaraciones de variables en C <declaraciones>::=<una_declaración><declaraciones> ε <una_declaración>::= <tipo> <lista_id_var> ; <lista_id_var>::= id <mas_id> <mas_id>::=, id <mas_id> ε <tipo>::= int float - Gramática en notación BNFA que define la sintaxis de las declaraciones de variables en C <declaraciones>::={<una_declaración>; <una_declaración>::= <tipo> id{,id <tipo>::= int float - Comprobar si la siguiente gramática es ambigua. En caso de serlo, modificarla para que no lo sea sin alterar la semántica que define. <valor> ::= <signo> <valor> cte_car identificador cte_ent <Signo> ::= + - ε - La siguiente sintaxis pretende definir un lenguaje de una lista de cero a infinitos identificadores separados por punto y coma. Justificar si es correcta o no, y en caso de no serlo, corregirla. <Lista> ::= identificador ; <Lista> identificador ε Ejemplos de creación de gramáticas sintácticas 1) Define en notación BNF la sintaxis de las llamadas a función en un determinado lenguaje de programación. Dicha llamada se caracteriza por estar formadas por el identificador de la llamada seguido de uno o dos parámetros delimitados por los símbolos (). En caso de tener un sólo parámetro ha de ser obligatoriamente un identificador. Pero si tiene dos parámetros, cada uno de ellos podrá ser indistintamente un identificador, una llamada a otra función o una constante entera 2) Crear una gramática sintáctica en notación BNF que defina la declaración de una tabla comienza por el nombre, seguido de : y la palabra reservada tabla. A continuación se definen las dimensiones de la tabla, al menos una. En primer lugar se definen los límites inferiores separados por comas. A continuación, y después de la palabra reservada hasta, los límites superiores separados por comas. Puede que no coincidan el número de limites inferiores y superiores. Cada límite se indica mediante una constante entera (una constante está formada por uno o más dígitos). Ejemplo: x : tabla 0, 1 hasta 9, 5, 6 Modificar la gramática creada para que existan igual número de límites inferiores que superiores. Ejemplo: x : tabla 0, 1, 1 hasta 9, 5, 6 (* 3 dimensiones: 0..9, 1..5 y 1..6 *). 3) Definir una gramática sintáctica escrita en notación BNF que representa la sintaxis de la declaración de una tabla.la definición de dicha tabla empieza por la palabra reservada TABLA, seguido de un índice delimitado por los símbolos [], seguido de la palabra reservada DE y finalizando por el tipo de los elementos de la misma que se representan por un identificador. El índice está delimitado por los corchetes y puede ser: un identificador o dos constantes enteras separadas por el símbolo.. a las que le puede preceder el símbolo -. 14

15 4) Se desea definir la sintaxis de un pequeño lenguaje para cálculos matemáticos. Las características de este lenguaje son la siguientes: Únicamente es posible declarar variables y realizar sentencias de cálculo (asignaciones a variables), con la peculiaridad de que no hay ninguna ordenación entre declaraciones y sentencias de cálculo, es decir, pueden estar mezcladas y no hay ninguna obligación de que al principio o al final del fuente deba haber una declaración o un cálculo. Dos ejemplos de fuentes en este lenguaje pueden ser los siguientes: int x memoria = 7.5 x = 7 int x float y x = 7 * memoria Un fuente puede contener cualquier cantidad tanto de declaraciones como de sentencias de cálculo. Sin embargo, aunque de declaraciones es válido que no exista ninguna, la sintaxis exige que un fuente tenga al menos una sentencia de cálculo. Se pide: a) Definir la sintaxis de este lenguaje de programación en función de los no terminales <Declaración> y <Sent_cálculo>, cuyas sintaxis no deben definirse. Realizar la definción primero en BNF estándar y a continuación en BNF extendida o ampliada. b) Suponer ahora que la sintaxis del lenguaje anterior se modifica en las siguientes características: 1. En un fuente todas las declaraciones deben estar al principio del mismo, mientras que todas las sentencias de cálculo deben estar al final. 2. El número de sentencias de cálculo en un fuente ha de ser siempre mayor que el número de declaraciones. Al menos debe haber una sentencia de cálculo y es válido que no haya ninguna declaración. 3. Todas las sentencias, ya sean de declaración de variables o de cálculo, van separadas por un punto y coma. Por tanto, la última sentencia de cálculo no lleva punto y coma a continuación. 5) Representar mediante una gramática sintáctica en notación BNF los siguientes lenguajes de sumas de números naturales definidos sobre el alfabeto Σ = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +. a) L 0 el lenguaje de sumas de números naturales, donde el operador + es binario y no puede anidarse Ejemplos de palabras del lenguaje: ó 35 Ejemplos de palabras no válidas: 34+ ó b) L 1 el lenguaje de sumas en el que los números naturales no pueden tener ceros a la izquierda. El número 0 se representará por un único cero, nunca por una secuencia de ceros. Ejemplo:10+0 Ejemplo de palabra no válida: c) L 2 el lenguaje de sumas en el que los números naturales pueden empezar por 0, aunque no sea el número 0, pero en cada suma se cumple siempre la condición de que el primer y el último número tienen siempre la misma longitud (al menos habrá dos números). Ejemplo: Ejemplos de palabras no válidas: , 1 d) L 3 el lenguaje de sumas en el que los números naturales pueden empezar por 0, aunque no sea el número 0, pero en el que se cumple la condición de que al menos dos números tienen la misma longitud. Ejemplo:

16 Ejemplo de separación léxico/sintáctica en una gramática 1. Dada la siguiente gramática léxico sintáctica separar la gramática léxica de la sintáctica <Tipo> ::= <TipoSimple> ^ <Id> TABLA '[' <TipoSimple> ']' DE <Tipo> <TipoSimple> ::= ENTEROS CARACTERES <Num>.. <Num> <Id> ::= <Letra> { <Letra> <Digito> <Num> ::= <Digito> { <Digito> <Letra> ::= a z A Z <Digito> ::= 0 9 Gramática sintáctica <tipo>::= <tipo_simple> id TABLA '[' <tipo_simple> ']' DE <tipo> <tipo_simple> ::= ENTEROS CARACTERES num..num> Gramática léxica <Id> ::= <Letra> { <Letra> <Digito> <Num> ::= <Digito> { <Digito> <Letra> ::= a z A Z <Digito> ::= Dada la siguiente gramática léxico sintáctica separar la gramática léxica de la sintáctica <Tabla> ::= TABLA [ <Indice> ] OF <Tipo> <Indice> ::= <Limite>.. <Limite> identificador <Limite> ::= <Signo> <cte_ent> <Signo> ::= - ε <Tipo> ::=<identificador> <Identificador> ::= <Letra> <letradigito> <letra> <letradigito>::=<letra> <digito> < cte_ent > ::= <Digito> cte_ent> <Digito> <Letra> ::= a z A Z <Digito> ::= 0 9 Gramática sintáctica <Tabla> ::= TABLA [ <Indice> ] OF identificador <Indice> ::= <Limite>.. <Limite> identificador <Limite> ::= <Signo> cte_ent <Signo> ::= - ε Gramática léxica <Identificador> ::= <Letra> <letradigito> <letra> <letradigito>::=<letra> <digito> < cte_ent > ::= <Digito> <cte_ent> <Digito> <Letra> ::= a z A Z <Digito> ::=

17 Ejercicio de sintaxis y separación de gramática léxica y sintáctica 1. Se pretende definir la declaración de variables de un lenguaje de programación L, caracterizada por lo siguiente: Comienza por la palabra reservada VAR y a continuación pueden existir de cero a infinitas listas de variables separadas por punto y coma. Cada lista de variables, a su vez, se compone de uno a infinitos identificadores separados por coma, a continuación la palabra dos puntos, y finalmente el tipo de las variables, que puede tratarse de uno o dos identificadores. Cada variable es representada por un identificador, cuya construcción responde a las siguientes reglas: Comienza por una letra Continúa por letras, dígitos o caracteres de subrayado en cuantía indeterminada (de cero a infinito) No pueden aparecer dos caracteres de subrayado consecutivos. Ejemplo: VAR x, aux_1, aux2_ : entero; i : entero doble Se pide: a) Determinar el léxico de la declaración de variables de este lenguaje (basta con una enumeración de las palabras que componen el lenguaje). Construir una definición regular para los identificadores. b) Definir la sintaxis mediante una gramática en notación BNF Ampliada o EBNF. No se considerará válida la solución si no se utilizan adecuadamente los metasímbolos que indican repetición y optatividad. c) Definir la sintaxis utilizando la notación BNF estándar. d) Modificar la sintaxis BNF del apartado 3 de lo que se ha llamado lista de variables para que puedan declararse simultáneamente variables de diferentes tipos. Por ejemplo, en aux1, aux2, aux3 : entero, real doble, logico la variable aux1 sería entera, la variable aux2 real doble y la variable aux3 lógica. La gramática debe exigir que el número de variables de la parte izquierda sea igual que el número de tipos de la parte derecha. Además, como es lógico, dicho número será mayor o igual que 1. e) Crear una gramática conjunta de las características léxicas y sintácticas 2. La sintaxis de un lenguaje natural es la siguiente: Un texto estará formado por un número indeterminado de oraciones separadas por el símbolo ';' o por el símbolo '.', y vendrá terminado en '.'. Al menos habrá una oración. Una oración está compuesta de un sujeto y de un predicado. Un sujeto es un nombre precedido o no de un artículo, y seguido de uno o más calificativos separados por ','. Un calificativo es un adjetivo. El predicado consta de un verbo seguido de un número indeterminado de complementos. En primer lugar irá un complemento directo, si es que hay, después un complemento indirecto, que también será optativo, y por último una lista de cero o más complementos circunstanciales. Un complemento directo es una frase nominal. La frase nominal es un nombre precedido o no de artículo, y seguido de un calificativo, un calificativo puede ser un adjetivo o predicado. Tanto el complemento indirecto como el complemento circunstancial están formados por una preposición seguida de una frase nominal. Para este lenguaje natural: a) Indicar cuál es el léxico de dicho lenguaje. b) Escribir la gramática en notación BNF Ampliada (EBNF) que define la sintaxis del citado lenguaje. c) Escribir la gramática en notación BNF stantard que especifique la misma sintaxis. 17

18 3. En un lenguaje de programación L, se desea definir una sentencia de alternativa múltiple, cuya estructura general es la siguiente : ALTERNATIVA (expresión) { alternativa 1 : grupo sentencias break... alternativa n : grupo sentencias break POR DEFECTO : grupo sentencias Para construir la expresión se podrán utilizar identificadores y constantes como operandos, y como operadores los símbolos aritméticos binarios: (+, -, *, /). Debiéndose tomar además en consideración las siguientes reglas de precedencia: Los operadores (+ y -) tienen una precedencia menor que los operadores (*y /). Se podrán utilizar paréntesis de la forma habitual para alterar la precedencia. Los operadores + y - pueden ser también operadores unarios (con mayor precedencia). Puede que no existan alternativas en cuyo caso debe existir la opción POR DEFECTO, que consiste en la palabra reservada POR DEFECTO seguida de un grupo de sentencias. En otro caso de existir alternativas, no es obligatorio que aparezca la opción POR DEFECTO. Pero si aparece deberá ser la última y nunca llevará la sentencia break. Cada alternativa está formada por una lista de una o más constantes separadas por comas. Cada constante puede ser indistintamente entera o carácter. El grupo de sentencias está formado por cero o más sentencias separadas por el símbolo ;, la última de las cuales podrá ser la sentencia break ( no es obligatoria pero si aparece será la última). Se pide: a) Indicar cuál es el léxico de dicho lenguaje b) Obtener una gramática en notación BNF estándar y otra en BNF ampliada (ó extendida) que especifique la anterior sintaxis. Nota: No es necesario la definición de las sentencias, puesto que no se especifica (se dejará en función del no terminal <sentencia>). 4. En una versión de lenguaje C se declaran variables de los tipos int o float al tiempo que se inicializan. Un fuente consta de un número indeterminado de declaraciones (0 o más) estando separadas por punto y coma (;). Tanto las declaraciones int y float pueden estar mezcladas de todas las formas posibles. Para declarar las variables se escribe la palabra reservada float, int seguida de la siguiente definición La lista con los nombres de las variables (1 o más) separadas por comas (,). Las variables podrán ser de los siguientes tipos: simple (aparecerá únicamente el nombre), puntero (anteponiendo el símbolo * al nombre), o array multidimensional (detrás del nombre se indican las dimensiones. El tamaño de cada dimensión viene expresado mediante una constante entera entre corchetes). Dos puntos (:) para separar los nombres de las variables declaradas de los valores de su inicialización. Los valores con los que se inicializan las variables están separados por comas (,). Cada valor será una expresión aritmética formada por los operadores binarios { +,-,div,/,*, teniendo los operadores {+,- menor precedencia que el operador (div) que a su vez tiene menor precedencia que los operadores {*,/. Los operandos pueden ser constantes enteras o reales. La expresión aritmética puede usar los paréntesis para modificar la precedencia de operadores. Ejemplos: float a, *b : 3.0, ( ) * 2.5 ; int c, *d, e [2] [2] : 3, ( 4 ), 5 ( ) * 5 ; Se pide: a) Indicar cuál es el léxico de dicho lenguaje. b) Escribir la gramática en notación BNF Ampliada (EBNF) que define la sintaxis del citado lenguaje. 18

19 Especificación sintáctica de un lenguaje de programación Subconjunto de la gramática sintáctica del lenguaje Pascal en notación BNF <gramática_sintáctica>::= <parte_decl> <parte_ejec> <parte_decl>::= <cabecera> <declaraciones> <cabecera>::= PROGRAM id ; <declaraciones>::= <decl_cte> <decl_tip> <decl_var> <decl_sub>.. <decl_cte>::= CONST <constantes> ε <constantes>::= <una_cte> ; <mas_ctes> <mas_ctes>::= <una_cte> ; <mas_ctes> ε <una_cte>::= id = <constante> <constante> ::= <signo> <cte_numérica> literal <Signo> ::= + - ε <cte_numérica> ::= id cte_ent cte_real..<decl_tip>::=. <decl_var> ::= VAR <una_var> ; <mas_var> <mas_var>::= <una_var> ; <mas_var> ε <una_var> ::= <lista_id> : <tipo> <lista_id> ::= id < mas_id> <mas_id>::=, id <mas_id> ε <tipo> ::= INTEGER BOOLEAN CHAR REAL.. <decl_sub>::=. <parte_ejec>::= BEGIN <list_sent> END. <list_sent>::= <sent> <sent> ; <list_sent> <sent>::= <sent_sel> <sent_rep> <sent_comp> <sent_vacía> <sent_e/s>.... <sent_sel>::= <sent_if> <sent_case>... <sent_if>::= IF <expr> THEN <sent> ELSE <sent> IF <expr> THEN <sent>. <sent_case>::=... <sent_rep>::= <sent_while> <sent_repeat>... <sent_while>::= while <expr> DO <sent>. <sent_comp>::= <parte_ejec> <sent_vacía>::= ε. <sent_case>::=case identificador OF <lista_alternativas> END <lista_alternativas>::=<alternativa><resto_alternativas> <resto_alternativas>::=<alternativa><resto_alternativas> ε <alternativa>::=<constantes>:<sentencia>; <constantes>::= <cte>, <constantes> <cte> <cte>::=cte_ent cte_car identificador <sent_e/s>::= read (< list_var>) write ( <lista_exp>) 19

20 Expresiones Son muy importantes en la sintaxis de un lenguaje programación, puesto que forman parte de la mayoría de las estructuras que lo pueden formar: asignación, condiciones, control, Partiendo de una gramática de expresiones ambigua se van a ir haciendo las transformaciones que exija el diseño, <expr>::= <expr> <op> <expr> <opdo> <opdo>::= id cte <op>::= + - * / La anterior gramática es ambigua, las palabras se pueden obtener por más de un árbol de derivación, el árbol puede crecer por la derecha o izquierda, quitando la recursión por uno u otro lado la gramática deja de ser ambigua. Quitando la recursión por la derecha Quitando la recursión por la izquierda <expr>::=<expr> <op> <opdo> <opdo> <expr>::=<opdo> <op> <expr> <opdo> <opdo>::= id cte <opdo>::= id cte <op>::= + - * / <op>::= + - * / Las anteriores gramáticas tienen el problema de la precedencia entre operadores, problema que se puede resolver: creando tantos símbolos no terminales como niveles de precedencia existan, asociando el operador menos precedente al símbolo inicial (raiz) y el mas precedente a los operandos (hojas), así <op+> está asociado a <expr> y <op*> a <term> <expr>::=<expr> <op+> <term> <term> <expr>::=<term> <op+> <expr> <term> <term>::=<term> <op*> <opdo> <opdo> <term>::=<opdo> <op*> <term> <opdo> <opdo>::= id cte <opdo>::= id cte <op*>::= * / <op+>::= + - <op*>::= * / <op+>::= + - La gramática anterior de la izquierda tiene asociatividad por la izquierda para los operadores <op+> y <op*> es decir la palabra id+cte+id se evalúa de izquierda a derecha el árbol crece por la izquierda al tener la recursión por la izquierda, mientras que la otra gramática tiene la asociatividad por la derecha para los mismos operadores. Los paréntesis en las expresiones El contenido del paréntesis es un nuevo operando y por lo tanto está en el nivel de los operandos. <opdo>::= id cte (<expr>) La llamada a una función, Se trata de un operando y como tal está definido en la gramática <opdo>::= <llamada> Operadores unarios Tienen mayor precedencia, por lo tanto más cercano a los operandos <fact> ::= <unario> <opdo> Las gramáticas siguiente tiene tres niveles de precedencia entre operadores, de menor a mayor: <op+>,<op*> son binarios y <unario> es unario precede al operando y se puede anidar. Gramática de expresiones con recursión inmediata por la izquierda <expr>::= <expr> <op+> <term> <term> <term>::= <term> <op*> <fact> <fact> <fact>::= <unario> <fact> <opdo> <opdo>::= id cte <llamada> ( <expr> ) <op*>::=* / <op+>::= + - <unario>::= - 20

21 Gramática equivalente a la anterior en la cual se ha quitado la recursión inmediata por la izquierda, Modificándose la asociatividad de los operadores <expr>::= <term> <rest_expr> <rest_expr>::= <op+> <term> <rest_expr> ε <term>::= <fact> <rest_term> <rest_term>::= <op*> <fact> <rest_term> ε <opdo>::= id cte <llamada> ( <expr> ) <factor>::= <unario> <opdo> <op*>::=* / <op+>::= + - <unario>::= - Gramática equivalente a la anterior escrita en notación BNFA <expr> : := <term> { <op_+> <term> <term> : := <fact> { <op_*> <Factor> <fact> : := { - <opdo> <opdo> ::= id cte <llamada> (<expr> ) <op*>::=* / <op+>::= + - Gramática de expresiones equivalente a la anterior que tiene como prefijos comunes los no terminales expr y term <expr>::= <term> <op+> <expr> <term> <term>::= <fact> <op*> <term> <fact> <fact>::= <unario> <fact> <opdo> <opdo>::= id cte <llamada> ( <expr> ) <op*>::=* / <op+>::= + - <unario>::=- Gramática equivalente a la anterior la cual se ha transformado quitándole los prefijos comunes <expr>::=<term><rest_term> <rest_term>::=<op+> <expr> ε <term>::= <fact><rest_fact> <rest_fact>::=<op*> <term> ε <fact>::= <unario> <fact> <opdo> <opdo>::= id cte <llamada> ( <expr> ) <op*>::=* / <op+>::= + - <unario>::=- Gramática de expresiones del lenguaje Pascal, donde no existe anidamiento entre los operadores relacionales a no ser que se utilicen paréntesis <expre>::=<expr> <op_rel> <expr> <expr> <expr>::= <expr> <op+> <term> <term> <term>::= <term> <op*> <fact> <fact> <fact>::= <unario> <fact> <opdo> <opdo>::=id cte_ent cte_real literal <llamada> (<expre>) <op*>::=* / MOD DIV AND <op+>::= + - OR XOR <unario>::=+ - NOT <op_rel>::= < > <= >= <> = IN Gramática equivalente a la anterior en notación BNFA <expre> : := <expr> [ <op_rel> <expr> ] <expr> : := { <term> <op_+> <term> <term> : := { <fact> <op_*> <Fact <fact> : := { <unario> <opdo> <opdo> ::= id cte_ent cte_real literal <llamada> (<expre>) <op*>::=* / MOD DIV AND 21

22 Subconjunto de la gramática sintáctica del lenguaje Pascal en notación EBNF (BNFA) <gramática_sintáctica>::= <parte_decl> <parte_ejec> <parte_decl>::= <cabecera> <declaraciones> <cabecera>::= PROGRAM id ; <declaraciones>::= [<decl_cte>] [<decl_tip>] [<decl_var>] [<decl_sub>]. <decl_cte>::= CONST <una_cte> ; { <una_cte> ; <una_cte>::= id = <constante> <constante> ::= [<signo>] <cte_numérica> literal <Signo> ::= + - <cte_numérica> ::= id cte_ent cte_real <decl_tip>::=.. <decl_var> ::= VAR <una_var> ;{<una_var> ; <una_var> ::= id {, id : <tipo> <tipo> ::= INTEGER BOOLEAN CHAR REAL <decl_sub>::=. <parte_ejec>::= BEGIN <sent> { ; <sent> END. <sent>::= <sent_sel> <sent_rep> <sent_comp> <sent_vacía>... <sent_sel>::= <sent_if> <sent_case>.... <sent_if>::= IF <expr> THEN <sent> [ <parte_else> ] <parte_else>::= ELSE <sent> <sent_rep>::= <sent_while> <sent_repeat>... <sent_e/s>::= read[ln] (< list_var>) write[ln] ( <lista_exp>) <sent_comp>::= <parte_ejec> Ejemplo de Subprogramas en un lenguaje Declaracion subprograma cuerpo subprograma <Función> ::= <Cabecera_Función> <Cuerpo_Subprograma> <Cabecera_Función> ::= FUNCION id ( {<Param_Formal; ) <Param_Formal> ::= <Param_Valor> <Param_Ref> <Param_Valor> ::= id : <Tipo> <Param_Ref> ::= VAR id : <Tipo> <Tipo> ::= ENTERO REAL CARACTER LÓGICO <Cuerpo_Subprograma> ::= INICIO {<Sentencia>; FINAL Sentencia IF en los lenguajes de programación (ambiguedad ) Es una estructura importante en cualquier lenguaje de programación, al igual que las expresiones, vamos a partir de una gramática ambigua. <sent_if>::=if <expr> THEN <sent> ELSE ><sent> IF <expr> THEN <sent> <sent>::= <sent_if> <otras> 22

23 Una palabra a generar puede ser: IF e1 THEN IF e2 THEN s1 ELSE s2, que tiene dos árboles de derivación <sent_if IF <expr> THEN <sent> ELSE > <sent> IF <sent_if > <expr> THEN <sent> e1 <sent_if> <otras> s2 e1 <sent_if> IF <expr> THEN <sent> IF <expr> THEN <sent> ELSE > <sent> e2 <otras> s1 Quitando prefijos comunes queda la siguiente gramática: e2 <otras> s1 <otras> s2 <sent_if>::=if <expr> THEN <sent> <parte_else> <parte_else>::=else<sent> ε <sent>::= <sent_if> <otras> <sent_if> <sent_if> IF <expr> THEN <sent> <p_else> e1 <sent_if> ε IF <expr> THEN <sent> <p_else> IF <expr> THEN <sent> <P_ELSE > e1 <sent_if> IF <expr> THEN <sent> ELSE <sent> <otras> s2 e2 Sentencias IF en el lenguaje ADA <otras> s1 ELSE <sent> <otras> s2 <sent_if>::=if <expr> THEN <sent> end_if <sent_if>::=if <expr> THEN <sent> ELSE ><sent>end_if e2 <otras> s1 La gramática sigue siendo ambigua. La sentencia if de Pascal resuelve la ambigüedad asociando la parte ELSE al IF más cercano, en el ejemplo anterior el árbol correcto será el de la izquierda. Otros lenguajes quitan la ambigüedad poniendo finalizadores de sentencia ( end if, ; ) Una palabra a generar es : IF e1 THEN IF e2 THEN s1 end_if ELSE s2 end_if, sólo un árbol de derivación (fig1) Una palabra a generar es : IF e1 THEN IF e2 THEN s1 ELSE s2 end_if end_if, sólo un árbol de derivación (fig2) <sent_if> IF <expr> THEN <sent> ELSE <sent> end_if e1 <sent_if> <otras> s2 IF <expr> THEN <sent> end_if <sent_if> IF <expr> THEN <sent> end_if e2 <sent_if> IF <expr> THEN <sent> ELSE <sent> end_if fig1 e2 <otras> s1 e1 fig2 <otras> 1 <otras> s2 23

Tema 5 Lenguajes independientes del contexto. Sintaxis

Tema 5 Lenguajes independientes del contexto. Sintaxis Tema 5 Lenguajes independientes del contexto. Sintaxis 1 Gramáticas independientes del contexto Transformación de gramáticas independientes del contexto Autómatas de pila Obtención de un autómata de pila

Más detalles

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo: 1 Clase 3 SSL EXPRESIONES REGULARES Para REPRESENTAR a los Lenguajes Regulares. Se construyen utilizando los caracteres del alfabeto sobre el cual se define el lenguaje, el símbolo y operadores especiales.

Más detalles

GRAMATICAS LIBRES DEL CONTEXTO

GRAMATICAS LIBRES DEL CONTEXTO GRMTICS LIBRES DEL CONTEXTO Estas gramáticas, conocidas también como gramáticas de tipo 2 o gramáticas independientes del contexto, son las que generan los lenguajes libres o independientes del contexto.

Más detalles

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V. Compiladores: Análisis Sintáctico Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V. Sintaxis Define la estructura del lenguaje Ejemplo: Jerarquía en

Más detalles

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular. MODELOS DE COMPUTACION I Preguntas Tipo Test Indicar si son verdaderas o falsas las siguientes afirmaciones: 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular. 2.

Más detalles

EJERCICIOS del TEMA 3: Lenguajes independientes del contexto

EJERCICIOS del TEMA 3: Lenguajes independientes del contexto EJERCICIOS del TEMA 3: Lenguajes independientes del contexto Sobre GICs (gramáticas independientes del contexto) 1. Sea G una gramática con las siguientes producciones: S ASB ε A aab ε B bba ba c ) d )

Más detalles

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002 Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Ejercicios Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto

Más detalles

Autómatas de Pila y Lenguajes Incontextuales

Autómatas de Pila y Lenguajes Incontextuales Autómatas de Pila y Lenguajes Incontextuales Elvira Mayordomo Universidad de Zaragoza 5 de noviembre de 2012 Contenido de este tema 1. Introducción a los autómatas de pila 2. Definiciones 3. Equivalencia

Más detalles

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07 PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07 1. En qué método de análisis sintáctico puede suceder que en la construcción del árbol de derivación de las posibles expansiones de un símbolo no terminal

Más detalles

Procesadores de Lenguaje

Procesadores de Lenguaje Procesadores de Lenguaje Repaso TALF Cristina Tîrnăucă Dept. Matesco, Universidad de Cantabria Fac. Ciencias Ing. Informática Primavera de 2013 La Jerarquía de Chomsky Cuatro niveles de lenguajes formales

Más detalles

Lenguajes y Gramáticas

Lenguajes y Gramáticas Lenguajes y Gramáticas Teoría de Lenguajes Fernando Naranjo Introduccion Se desarrollan lenguajes de programación basados en el principio de gramática formal. Se crean maquinas cada vez mas sofisticadas

Más detalles

Procesadores de Lenguaje

Procesadores de Lenguaje Procesadores de Lenguaje Analizadores sintácticos descendentes: LL(1) Cristina Tîrnăucă Dept. Matesco, Universidad de Cantabria Fac. Ciencias Ing. Informática Primavera de 2013 Analizadores sintácticos

Más detalles

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main. LENGUAJE C CARACTERISTICAS DEL LENGUAJE 'C' El lenguaje 'C' se conoce como un lenguaje compilado. Existen dos tipos de lenguaje: interpretados y compilados. Los interpretados son aquellos que necesitan

Más detalles

Elementos de un programa en C

Elementos de un programa en C Elementos de un programa en C Un programa en C consta de uno o más archivos. Un archivo es traducido en diferentes fases. La primera fase es el preprocesado, que realiza la inclusión de archivos y la sustitución

Más detalles

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Unidad Didáctica 2 Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión 1.0.3 Índice

Más detalles

Autómatas Deterministas. Ivan Olmos Pineda

Autómatas Deterministas. Ivan Olmos Pineda Autómatas Deterministas Ivan Olmos Pineda Introducción Los autómatas son una representación formal muy útil, que permite modelar el comportamiento de diferentes dispositivos, máquinas, programas, etc.

Más detalles

El lenguaje C. 1. Identificadores, constantes y variables

El lenguaje C. 1. Identificadores, constantes y variables Principios de Programación El lenguaje C 1. Identificadores, constantes y variables 1.1. Conceptos de memoria Los nombres de variable como x, y, suma corresponden a localizaciones o posiciones en la memoria

Más detalles

Un autómata con pila no determinista (APND) es una septupla Q A B F en la que

Un autómata con pila no determinista (APND) es una septupla Q A B F en la que AUTÓMATAS CON PILA Un autómata con pila no determinista (APND) es una septupla Q A F en la que δ q 0 Q es un conjunto finito de estados A es un alfabeto de entrada es un alfabeto para la pila δ es la función

Más detalles

Principios de Computadoras II

Principios de Computadoras II Departamento de Ingeniería Electrónica y Computadoras Operadores y Expresiones rcoppo@uns.edu.ar Primer programa en Java 2 Comentarios en Java Comentario tradicional (multi-línea) Comentario de línea Comentario

Más detalles

Unidad 4. Autómatas de Pila

Unidad 4. Autómatas de Pila Unidad 4. Autómatas de Pila Una de las limitaciones de los AF es que no pueden reconocer el lenguaje {0 n 1 n } debido a que no se puede registrar para todo n con un número finito de estados. Otro lenguaje

Más detalles

El análisis descendente LL(1) 6, 7 y 13 de abril de 2011

El análisis descendente LL(1) 6, 7 y 13 de abril de 2011 6, 7 y 13 de abril de 2011 Analizadores sintácticos (repaso) Los analizadores descendentes: Corresponden a un autómata de pila determinista. Construyen un árbol sintáctico de la raíz hacia las hojas (del

Más detalles

Manual de turbo pascal

Manual de turbo pascal Universidad Nacional Experimental De Los Llanos Occidentales Ezequiel Zamora UNELLEZ-Barinas Manual de turbo pascal Bachilleres: Martinez Ninibeth C.I:20.867.002 Mora Yaco C.I:17.205.073 Estructura de

Más detalles

4. Operadores Operador asignación

4. Operadores Operador asignación Programación orientada a objetos con Java 43 4. Operadores Objetivos: a) Describir los operadores (aritméticos, incrementales, de relación, lógicos y de asignación) y los tipos de dato primitivos sobre

Más detalles

Lenguaje de programación C. Introducción

Lenguaje de programación C. Introducción Lenguaje de programación C Introducción 1 Elementos del lenguaje C Colección de funciones Estas funciones contienen declaraciones, sentencias, expresiones y otros elementos que en conjunto indican a la

Más detalles

Escribir la expresión regular de un número entero que no acepte que el primer dígito sea cero salvo el número 0. Solución: 0 [1-9][0-9]*

Escribir la expresión regular de un número entero que no acepte que el primer dígito sea cero salvo el número 0. Solución: 0 [1-9][0-9]* Procesadores de lenguaje Ejercicios del Tema 2 Ejercicio 2.1 Sean L = {a, aa, b} y M = {ab, b }. Describe LM y M 3 por enumercaión LM = { aab, ab, aaab, bab, bb } M 3 = { ababab, ababb, abbab, abbb, babab,

Más detalles

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Grado en Ingeniería Informática Online, Curso Universidad Rey Juan Carlos

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Grado en Ingeniería Informática Online, Curso Universidad Rey Juan Carlos TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES Grado en Ingeniería Informática Online, Curso 202-203 Universidad Rey Juan Carlos GUÍA PARA LA REALIZACIÓN DE LA HOJA DE PROBLEMAS No 3 (Tema 3: Expresiones Regulares)

Más detalles

AUTÓMATAS DE PILA Y LENGUAJES INDEPENDIENTES DEL CONTEXTO

AUTÓMATAS DE PILA Y LENGUAJES INDEPENDIENTES DEL CONTEXTO Autómatas de pila y lenguajes independientes del contexto -1- AUTÓMATAS DE PILA Y LENGUAJES INDEPENDIENTES DEL CONTEXTO AUTÓMATAS DE PILA - Son autómatas finitos con una memoria en forma de pila. - Símbolos

Más detalles

Estatutos de Control C# Estatutos de Decisión (Selección)

Estatutos de Control C# Estatutos de Decisión (Selección) SELECCIÓN Estatutos de Control C# Estatutos de Decisión (Selección) IF Condición THEN Estatuto1 ELSE Estatuto2 Estatuto1 Statement Condición... Antes de ver esta presentación: Lee el Capítulo correspondiente

Más detalles

Curso de Programación Avanzada en C

Curso de Programación Avanzada en C Curso de Programación Avanzada en C Copyright, 1996 Universidad Sim on Bol ivar 1 Prof. Mariela J. Curiel Contenido del Curso Conceptos BásicosB Estructuras de Control Arreglos Otros tipos de datos derivados

Más detalles

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos TEMA 2 Diseño de Algoritmos 7 2. DISEÑO DE ALGORITMOS 2.1. Concepto de Algoritmo En matemáticas, ciencias de la computación y disciplinas relacionadas, un algoritmo (del griego y latín, dixit algorithmus

Más detalles

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas. LEX Estructura de un programa en LEX { definiciones { reglas { subrutinas del usuario Las definiciones y subrutinas son opcionales. El segundo es opcional pero el primer indica el comienzo de las reglas.

Más detalles

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison LABORATORIO DE PROCESADORES DE LENGUAJE Curso: 2008-2009 Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison Planteamiento del problema En esta práctica se trata de realizar, mediante el

Más detalles

Máquinas Secuenciales, Autómatas y Lenguajes. Tema 3.1: Autómatas Finitos Deterministas

Máquinas Secuenciales, Autómatas y Lenguajes. Tema 3.1: Autómatas Finitos Deterministas Tema 3.1: Autómatas Finitos Deterministas Luis Peña luis.pena@urjc.es http://www.ia.urjc.es/cms/es/docencia/ic-msal Sumario Tema 3.1: Autómatas Finitos Deterministas. 1. Concepto de AFD 2. Equivalencia

Más detalles

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC. Programación n Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño o Vargas MsC. Variables y expresiones aritméticas Variables Conceptos de Memoria Una variable es un espacio en la memoria

Más detalles

Expresiones regulares, gramáticas regulares

Expresiones regulares, gramáticas regulares Expresiones regulares, gramáticas regulares Los LR en la jerarquía de Chomsky La clasificación de lenguajes en clases de lenguajes se debe a N. Chomsky, quien propuso una jerarquía de lenguajes, donde

Más detalles

Unidad II: Análisis semántico

Unidad II: Análisis semántico Unidad II: Análisis semántico Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico. El análisis semántico utiliza como entrada el árbol sintáctico

Más detalles

Tema: Autómata de Pila

Tema: Autómata de Pila Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores 1 Tema: Autómata de Pila Contenido La presente guía aborda los autómatas de pila, y se enfoca en la aplicación que se le puede dar a estas

Más detalles

Estructuras de Control. Secuencia y Selección

Estructuras de Control. Secuencia y Selección Estructuras de Control. Secuencia y Selección InCo - FING Programación 1 InCo - FING Estructuras de Control. Secuencia y Selección Programación 1 1 / 35 Estructuras de control InCo - FING Estructuras de

Más detalles

Lección 2 Introducción al lenguaje C

Lección 2 Introducción al lenguaje C Lección Introducción al lenguaje C Decimal Binario Hexadecimal A B C D E F Octal Equivalencia entre decimal, binario, hexadecimal y octal. Código ASCII (American Standard Code for Information Interchange)

Más detalles

LENGUAJE. Tema 2 Elementos de un programa

LENGUAJE. Tema 2 Elementos de un programa LENGUAJE Tema 2 Elementos de un programa ELEMENTOS DE UN PROGRAMA Comentarios. Identificadores. Constantes. Variables. Operadores. Sentencias o instrucciones. COMENTARIOS Los comentarios en C pueden ocupar

Más detalles

Convertir un AFND a un AFD

Convertir un AFND a un AFD Convertir un AFND a un AFD Existe una equivalencia entre los AFD y AFN, de forma que un autómata M es equivalente a un autómata M' si L(M) ) L(M'). Ejemplo: Los autómatas de la siguiente figura son equivalentes.

Más detalles

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC. Variables Conceptos de Memoria Una variable es un espacio en la memoria del PC Cada variable tiene un nombre, un tipo, un tamaño y un valor

Más detalles

Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer, utilizar y diseñar gramáticas de libre contexto

Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer, utilizar y diseñar gramáticas de libre contexto Universidad Autónoma del Estado de México Centro Universitario UAEM Texcoco Departamento de Ciencias Aplicadas. Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer,

Más detalles

Autómatas Finitos Deterministicos (DFA)

Autómatas Finitos Deterministicos (DFA) Autómatas Finitos Deterministicos (DFA) Introducción a la Lógica y la Computación Fa.M.A.F., Universidad Nacional de Córdoba 26/0/6 Info útil Bibliografía: Introducción a la teoría de autómatas, lenguajes

Más detalles

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF

ESCUELA POLITÉCNICA SUPERIOR PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF ESCUELA POLITÉCNICA SUPERIOR GRADO EN DISEÑO IND. INFORMÁTICA CURSO 2012-13 PRÁCTICA 2: EXPRESIONES, PRINTF Y SCANF HASTA AHORA... En prácticas anteriores se ha aprendido: La estructura principal de un

Más detalles

Teoría de Autómatas y Lenguajes Formales. Introducción a las Gramáticas. Gramáticas incontextuales

Teoría de Autómatas y Lenguajes Formales. Introducción a las Gramáticas. Gramáticas incontextuales Teoría de utómatas y Lenguajes Formales Introducción a las ramáticas. ramáticas incontextuales José M. Sempere Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia Introducción

Más detalles

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa

Inicio del programa. Entrada de datos. Proceso de datos. Salida de datos. Fin del programa PROGRAMACIÓN 10. Prof. Dolores Cuiñas H. Recuerde que estos son apuntes muy simplificados que deberá completar con la bibliografía recomendada APUNTES Nº 4 ESTRUCTURA SECUENCIAL GENERAL La estructura secuencial

Más detalles

Relaciones. Estructuras Discretas. Relaciones. Relaciones en un Conjunto. Propiedades de Relaciones en A Reflexividad

Relaciones. Estructuras Discretas. Relaciones. Relaciones en un Conjunto. Propiedades de Relaciones en A Reflexividad Estructuras Discretas Relaciones Definición: relación Relaciones Claudio Lobos, Jocelyn Simmonds clobos,jsimmond@inf.utfsm.cl Universidad Técnica Federico Santa María Estructuras Discretas INF 152 Sean

Más detalles

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo Algoritmos En general, no hay una definición formal de algoritmo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto, es decir, que un número finito de pasos convierten

Más detalles

Recopilación de ejercicios sobre expresiones regulares en exámenes de Compiladores e intérpretes

Recopilación de ejercicios sobre expresiones regulares en exámenes de Compiladores e intérpretes Recopilación de ejercicios sobre expresiones regulares en exámenes de Compiladores e intérpretes IG29: Compiladores e intérpretes Segunda sesión de teoría Bloque 1: Modelado Ejercicio 1 Modela mediante

Más detalles

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. APUNTADORES Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No hay que confundir una dirección de memoria con el contenido

Más detalles

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos Algoritmos y Estructuras de Datos I 1 cuatrimestre de 009 Departamento de Computación - FCEyN - UBA Programación funcional - clase Tipos algebraicos Tipos algebraicos y abstractos ya vimos los tipos básicos

Más detalles

Generador de analizadores léxicos FLEX

Generador de analizadores léxicos FLEX Generador de analizadores léxicos FLEX Procesadores de Lenguajes 4 o Informática PL curso 2008-2009 (CCIA) CCIA Octubre 2008 PL 0809 (CCIA) Introducción a FLEX Octubre-2008 1 / 12 Uso de FLEX FLEX: traduce

Más detalles

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Algoritmos y programas. Algoritmos y Estructuras de Datos I Algoritmos y programas Algoritmos y Estructuras de Datos I Primer cuatrimestre de 2012 Departamento de Computación - FCEyN - UBA Programación funcional - clase 1 Funciones Simples - Recursión - Tipos de

Más detalles

5 Autómatas de pila 5.1 Descripción informal. 5.2 Definiciones

5 Autómatas de pila 5.1 Descripción informal. 5.2 Definiciones 1 Curso Básico de Computación 5 Autómatas de pila 5.1 Descripción informal Un autómata de pila es esencialmente un autómata finito que controla una cinta de entrada provista de una cabeza de lectura y

Más detalles

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN Métodos Numéricos 2008 - Carlos Zotelo Introducción a Fortran 77 / 90 1. El lenguaje Fortran 77 / 90 2. Tipos de datos básicos 3. Constantes y variables 4. Entrada

Más detalles

En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse

En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse En matemáticas el concepto de conjunto es considerado primitivo y no se da una definición de este, por lo tanto la palabra CONJUNTO debe aceptarse lógicamente como un término no definido. Un conjunto se

Más detalles

Lenguajes (gramáticas y autómatas)

Lenguajes (gramáticas y autómatas) Lenguajes (gramáticas y autómatas) Elvira Mayordomo Universidad de Zaragoza 19 de septiembre de 2013 Elvira Mayordomo (Universidad de Zaragoza) Lenguajes (gramáticas y autómatas) 19 de septiembre de 2013

Más detalles

Temas. Objetivo. Que el estudiante logre: 1) Identificar conceptos constructivos de la Teoría de la Computabilidad. 2) Definir autómatas de pila.

Temas. Objetivo. Que el estudiante logre: 1) Identificar conceptos constructivos de la Teoría de la Computabilidad. 2) Definir autómatas de pila. 0 Temas Definición de autómata de pila Autómata de pila determinístico y no determinístico Objetivo Que el estudiante logre: 1) Identificar conceptos constructivos de la Teoría de la Computabilidad. 2)

Más detalles

Expresiones y sentencias

Expresiones y sentencias Expresiones y sentencias Expresión Construcción (combinación de tokens) que se evalúa para devolver un valor. Sentencia Representación de una acción o una secuencia de acciones. En Java, todas las sentencias

Más detalles

Una cadena sobre Σ es cualquier secuencia de elementos de longitud finita sobre Σ.

Una cadena sobre Σ es cualquier secuencia de elementos de longitud finita sobre Σ. Alfabetos, Cadenas y Lenguajes Definición 1 Un Alfabeto es cualquier conjunto finito, no vacío. Ejemplo 1 Sea Σ = {0, 1, 2, 3,..., 9} donde 0 Σ Definición 2 Una cadena sobre Σ es cualquier secuencia de

Más detalles

Agenda. BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar.

Agenda. BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar. Agenda BNF y EBNF Brevemente, lo necesario para especificar el lenguaje sobre el que vamos a trabajar. JLEX y JCUP Breve descripción del las herramientas para generar el parser o analizador sintáctico.

Más detalles

Computabilidad y Lenguajes Formales: Autómatas Finitos

Computabilidad y Lenguajes Formales: Autómatas Finitos 300CIG007 Computabilidad y Lenguajes Formales: Autómatas Finitos Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. Gloria Inés Alvarez V. No Determinismo Hasta ahora cada

Más detalles

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>}

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>} Bloque II. 2. Objetos y acciones elementales Bloque II. 2. Objetos y acciones elementales Objetivos: Familiarizarse con conceptos de entorno, objeto y tipo Entender qué significa que un objeto sea de un

Más detalles

Estructuras de control

Estructuras de control Estructuras de control Introducción Los algoritmos vistos hasta el momento han consistido en simples secuencias de instrucciones; sin embargo, existen tareas más complejas que no pueden ser resueltas empleando

Más detalles

Tema 2. El lenguaje JAVA

Tema 2. El lenguaje JAVA Tema 2. El lenguaje JAVA Nomenclatura habitual Variables Tipos de variables Tipos primitivos Referencias Arrays Operadores Operadores de Java Precedencia de operadores Sentencias de control Sentencias

Más detalles

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz Expresiones Aritméticas Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz Expresiones Aritméticas El computador puede realizar cálculos además de mostrar datos por pantalla.

Más detalles

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS Una vez que ya sabes crear tus propios programas, vamos a analizar los fundamentos del lenguaje de programación C. Este capítulo incluye además los siguientes temas:

Más detalles

TEMA 1. MATRICES, DETERMINANTES Y APLICACIÓN DE LOS DETERMINANTES. CONCEPTO DE MATRIZ. LA MATRIZ COMO EXPRESIÓN DE TABLAS Y GRAFOS.

TEMA 1. MATRICES, DETERMINANTES Y APLICACIÓN DE LOS DETERMINANTES. CONCEPTO DE MATRIZ. LA MATRIZ COMO EXPRESIÓN DE TABLAS Y GRAFOS. TEMA 1. MATRICES, DETERMINANTES Y APLICACIÓN DE LOS DETERMINANTES. 1. MATRICES. CONCEPTO DE MATRIZ. LA MATRIZ COMO EXPRESIÓN DE TABLAS Y GRAFOS. DEFINICIÓN: Las matrices son tablas numéricas rectangulares

Más detalles

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas Unidad V Análisis Semántico M.C. Juan Carlos Olivares Rojas Agenda 5.1 Analizador semántico 5.2 Verificación de tipos en expresiones. 5.3 Conversión de tipos. 5.4 Acciones agregadas en un analizador sintáctico

Más detalles

Autómatas de Pila. Descripciones instantáneas o IDs. El Lenguaje de PDA. Equivalencia entre PDAs y CFGs INAOE (INAOE) 1 / 50

Autómatas de Pila. Descripciones instantáneas o IDs. El Lenguaje de PDA. Equivalencia entre PDAs y CFGs INAOE (INAOE) 1 / 50 INAOE (INAOE) 1 / 50 Contenido 1 2 3 4 (INAOE) 2 / 50 Pushdown Automata Las gramáticas libres de contexto tienen un tipo de autómata que las define llamado pushdown automata. Un pushdown automata (PDA)

Más detalles

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 2 - Introducción al lenguaje Java, identificadores y comentarios. Carlos Montenegro Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas 1. Introducción: Java tiene como todos

Más detalles

UNIDAD DE APRENDIZAJE I

UNIDAD DE APRENDIZAJE I UNIDAD DE APRENDIZAJE I Saberes procedimentales Interpreta y utiliza correctamente el lenguaje simbólico para el manejo de expresiones algebraicas. 2. Identifica operaciones básicas con expresiones algebraicas.

Más detalles

Conjuntos. Un conjunto es una colección de objetos. Si a es un objeto y R es un conjunto entonces por. a R. se entiende que a pertenece a R.

Conjuntos. Un conjunto es una colección de objetos. Si a es un objeto y R es un conjunto entonces por. a R. se entiende que a pertenece a R. Conjuntos Un conjunto es una colección de objetos. Si a es un objeto y R es un conjunto entonces por se entiende que a pertenece a R. a R Normalmente, podremos definir a un conjunto de dos maneras: Por

Más detalles

Tema 2. Fundamentos de la Teoría de Lenguajes Formales

Tema 2. Fundamentos de la Teoría de Lenguajes Formales Departamento de Tecnologías de la Información Tema 2. Fundamentos de la Teoría de Lenguajes Formales Ciencias de la Computación e Inteligencia Artificial Índice 2.1. Alfabeto 2.2. Palabra 2.3. Operaciones

Más detalles

Gramáticas independientes del contexto AUTÓMATAS Y LENGUAJES FORMALES LENGUAJES INDEPENDIENTES DEL CONTEXTO Y AUTÓMATAS DE PILA. Otras definiciones I

Gramáticas independientes del contexto AUTÓMATAS Y LENGUAJES FORMALES LENGUAJES INDEPENDIENTES DEL CONTEXTO Y AUTÓMATAS DE PILA. Otras definiciones I Gramáticas independientes del contexto UTÓMTS Y LENGUJES FORMLES LENGUJES INDEPENDIENTES DEL CONTEXTO Y UTÓMTS DE PIL Francisco Hernández Quiroz Departamento de Matemáticas Facultad de Ciencias, UNM E-mail:

Más detalles

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal. LENGUAJE DE PROGRAMACIÓN TURBO PASCAL El lenguaje de programación de alto nivel Pascal fue diseñado el 1968 por Niklaus Wirth con una finalidad eminentemente pedagógica El 1983, el Pascal fue estandarizado

Más detalles

Gramáticas independientes del contexto. Tema 3: Lenguajes independientes del contexto. Derivaciones. Árbol de derivación

Gramáticas independientes del contexto. Tema 3: Lenguajes independientes del contexto. Derivaciones. Árbol de derivación Tema 3: Lenguajes independientes del contexto Gramáticas independientes de contexto (GIC) Conceptos básicos Ambigüedad Ejemplos de GICs Autómatas con pila (AP) Definición de autómata con pila Determinismo

Más detalles

Programación en java. Estructuras algorítmicas

Programación en java. Estructuras algorítmicas Programación en java Estructuras algorítmicas Estructuras algoritmicas 1. Conceptos basicos 1. Dato 2. Tipos de datos 3. Operadores 2. dsd Conceptos Basicos DATO: se considera una representación simbólica

Más detalles

Tema 4. Operadores y Expresiones

Tema 4. Operadores y Expresiones Tema 4 Operadores y Expresiones Contenidos 1. Conceptos Básicos. 2. Operadores Aritméticos. 3. Operadores de Relación, de Igualdad y Lógicos. 4. Operadores de Incremento y Decremento. 5. Operadores y Expresiones

Más detalles

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES (TALF) BLOQUE II: LENGUAJES REGULARES Tema 2: Autómatas Finitos Parte 2 (de 3). Autómatas Finitos No Deterministas (AFNDs) Grado en Ingeniería Informática URJC

Más detalles

Interrogación 2. Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. Segundo Semestre, 2003

Interrogación 2. Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. Segundo Semestre, 2003 Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación Interrogación 2 IIC 2222 Teoría de Autómatas y Lenguajes Formales Segundo Semestre, 2003 Esta interrogación

Más detalles

GUÍA DE ESTILO EN JAVA

GUÍA DE ESTILO EN JAVA GUÍA DE ESTILO EN JAVA Formato de líneas 1. No usar más de 80 caracteres por línea (imagen de tarjeta). De esta forma se pueden visualizar las líneas completas con un editor de texto o en una hoja impresa

Más detalles

Tema 3. Tipos de datos simples

Tema 3. Tipos de datos simples Tema 3. Tipos de datos simples Contenido del tema: Concepto de tipo. Tipos simples. Operadores. Expresiones. Semántica. Tipos y expresiones en lenguaje C++ Francisco J. Veredas Dpto. Lenguajes y Ciencias

Más detalles

TEORÍA DE CONJUNTOS.

TEORÍA DE CONJUNTOS. TEORÍA DE CONJUNTOS. NOCIÓN DE CONJUNTO: Concepto no definido del cual se tiene una idea subjetiva y se le asocian ciertos sinónimos tales como colección, agrupación o reunión de objetos abstractos o concretos.

Más detalles

Computación II. Introducción a Visual Basic

Computación II. Introducción a Visual Basic Computación II Introducción a Visual Basic Introducción a Visual Basic Microsoft Visual Basic es un conjunto de herramientas que posibilitan el desarrollo de aplicaciones para Windows de una manera rápida

Más detalles

Fila: Es un conjunto de varias celdas dispuestas en sentido horizontal.

Fila: Es un conjunto de varias celdas dispuestas en sentido horizontal. Que Es Excel? Excel es un programa que permite la manipulación de libros y hojas de calculo. En Excel, un libro es el archivo en que se trabaja y donde se almacenan los datos. Como cada libro puede contener

Más detalles

Construcción de tablas de análisis sintáctico LL(1)

Construcción de tablas de análisis sintáctico LL(1) Construcción de tablas de análisis sintáctico LL(1) Universidad de Costa Rica Escuela de Ciencias de la Computación e Informática Diego Centeno Gerardo Cortés Juan Diego Alfaro Resumen. A la medida en

Más detalles

PROPIEDADES DE LOS CAMPOS. Cada campo de una tabla dispone de una serie de características que proporcionan un control

PROPIEDADES DE LOS CAMPOS. Cada campo de una tabla dispone de una serie de características que proporcionan un control PROPIEDADES DE LOS CAMPOS Cada campo de una tabla dispone de una serie de características que proporcionan un control adicional sobre la forma de funcionar del campo. Las propiedades aparecen en la parte

Más detalles

APUNTES DE ÁLGEBRA LINEAL TEMA 2. SISTEMAS DE ECUACIONES LINEALES

APUNTES DE ÁLGEBRA LINEAL TEMA 2. SISTEMAS DE ECUACIONES LINEALES APUNTES DE ÁLGEBRA LINEAL TEMA 2. SISTEMAS DE ECUACIONES LINEALES Ignacio López Torres. Reservados todos los derechos. Prohibida la reproducción total o parcial de esta obra, por cualquier medio electrónico

Más detalles

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta Centro Asociado Palma de Mallorca Antonio Rivero Cuesta La Sintaxis de Java I... 5 Tipos de datos... 6 Tipos de datos simples... 7 Operadores... 11 Operadores Aritméticos... 12 Operadores relacionales...

Más detalles

Complejidad computacional (Análisis de Algoritmos)

Complejidad computacional (Análisis de Algoritmos) Definición. Complejidad computacional (Análisis de Algoritmos) Es la rama de las ciencias de la computación que estudia, de manera teórica, la optimización de los recursos requeridos durante la ejecución

Más detalles

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C Laboratorio de Arquitectura de Redes Punteros en lenguaje C Punteros en lenguaje C Definición Declaración e inicialización de punteros Operadores de punteros: «*» y «&» Operaciones con punteros Operaciones

Más detalles

EXPRESIONES ALGEBRAICAS. POLINOMIOS

EXPRESIONES ALGEBRAICAS. POLINOMIOS Unidad didáctica 5 EXPRESIONES ALGEBRAICAS. POLINOMIOS. EXPRESIONES ALGEBRAICAS. Estas expresiones del área son expresiones algebraicas, ya que además de números aparecen letras. Son también expresiones

Más detalles

Teoría de Lenguajes. Gramáticas incontextuales

Teoría de Lenguajes. Gramáticas incontextuales Teoría de Lenguajes Gramáticas incontextuales José M. Sempere Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia Gramáticas incontextuales 1. Definiciones básicas.

Más detalles

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Tipos de Datos Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial. Entrada de datos Procesamientos de datos Salida de resultados Los

Más detalles

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos PROGRAMACIÓN DE SHELL SCRIPTS EN LINUX El shell es un intérprete de órdenes, pero el shell no es solamente eso; los intérpretes de órdenes de Linux son auténticos lenguajes de programación. Como tales,

Más detalles

Práctica de constantes, expresiones y operadores. Programación en C 1

Práctica de constantes, expresiones y operadores. Programación en C 1 Práctica de constantes, expresiones y operadores Programación en C 1 Definición de variables (II) Las variables (automáticas) no inicializadas tienen cualquier valor. Una variable (automática) se inicializa

Más detalles

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL 1 TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL TECNOLOGÍA DE LA COMPUTADORA FACILITADOR: PARTICIPANTE: DAVID, CHIRIQUÍ 2015 2 Qué es un programa? Un programa informático es un conjunto

Más detalles

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes:

Constantes. Las constantes no cambian durante la ejecucion de un programa en C++, en C++ existen 4 tipos de constantes: Constantes Las constantes se pueden declarar con la palabra reservada const y se le asigna un valor en el momento de la declaracion, este valor no se puede modificar durante el programa y cualquier intento

Más detalles