Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Expresiones Regulares – BNF
Diagramas Sintácticos
Ciencias de la Computación I
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Expresiones Regulares
• Las expresiones regulares describen lenguajes regulares.
• Una expresión regular (también llamada patrón) es una
expresión que describe cadenas sobre un alfabeto.
• Las expresiones regulares se construyen utilizando los
operadores de unión (+) concatenación (.) y Clausura (*).
Ejemplos
(a+b)* describe L= {a, b}*
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Expresiones Regulares
• La sintaxis de las expresiones regulares cambia (respecto
de la notación convencional) según las herramientas y
aplicaciones consideradas.
• Se utilizan en editores de texto, bases de datos, sistemas
operativos y aplicaciones para buscar y reemplazar patrones
de texto; también para validación de un formato específico
como
fechas,
identificadores,
nombres
de
usuario,
direcciones de email, etc.
• Se incluyen en lenguajes de programación (por ej. en PERL
es parte de su sintaxis y en otros como PHP y JAVA, existen
librerías para el uso de expresiones regulares).
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Expresiones Regulares - Notación especial
El Punto “
.
” El punto es interpretado como cualquier símbolo (caracter alfanumérico, dígito, etc.), excepto el salto de línea.Ej: patrón: a.n en la cadena “tiene amnesia” hay coincidencia
“captando” no hay coincidencia
Los corchetes “[ ]” Los corchetes agrupan caracteres. Dentro de los corchetes es posible utilizar el guión "-" para especificar rangos de caracteres.
Ej. Patrón: [A-Z] coincide si la cadena contiene cualquier letra mayúscula
Patrón: canci[oó]n coincide si contiene canción o cancion
La barra “|”Se utiliza como OR, es equivalente al + en notación convencional
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Expresiones Regulares-Notación Especial
El signo “$” Representa el final de la cadena de caracteres
Ej. Patrón: a$ coincide con toda cadena que termine con a
El acento circunflejo “^” Este caracter tiene doble funcionalidad:
1) Al inicio "^" Significa que el inicio de la cadena debe coincidir con el símbolo que lo sucede
Ej. Patrón: ^[A-Z] Había una vez tiene coincidencia
Patrón: ^a[0-9]abc$ a5abc tiene coincidencia
2) Cuando se utiliza en conjunto con los corchetes significa NOT
Ej. Patrón: [^a-z] casa no hay coincidencia
[^a-z] @012 tiene coincidencia
Los paréntesis “()” tienen el mismo significado que en la notación convencional de expresiones regulares
Ej: patrón: al (este|oeste|norte|sur) de
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Expresiones Regulares- Notación Especial
La barra inversa “\” Se utiliza para "marcar" el siguiente caracter de forma que deje de tener o adquiera un significado especial:
1) En combinación con caracteres especiales como ( ., $, *,+, etc.) \.— Representa al punto como caracter literal
\$— Representa al $ como caracter literal \(— Representa al ( como caracter literal
Ej: Patrón: \([0-9][0-9]\.[0-9][0-9]\$\) en la cadena (10.99$)coincide
2) En otros casos da significado según la combinación: \n— Representa la "nueva línea”
\d— Representa un dígito del 0 al 9.
\w— Representa cualquier caracter alfanumérico. \s— Representa un espacio en blanco.
\D— Representa cualquier caracter que no sea un dígito del 0 al 9. \S— Representa cualquier caracter que no sea un espacio en blanco.
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Exp. Regulares- Notación Especial: Cuantificadores
Las llaves “{}”
{nro1} ó Entre nro1 y nro2, es la cantidad de veces {nro1,nro2} ó consecutivas que puede aparecer la expresión
{nro1,} anterior. El nro2 puede no especificarse.
Ej: Patrón ^\d{2}/\d{2}/\d{4}$ 01/01/1999coincide
Patrón \d{2,4} 00, 865, 9999 y 84236 coinciden
El asterisco “*” Se usa para encontrar la expresión anterior al mismo 0 ó más veces.
Ej: patrón ^[a-zA-Z]*$ abcZcoincide
El signo “+” Significa que la expresión anterior al mismo debe aparecer 1 ó más veces
Ej: [a-z]\d+ coincidirá en var1, var2, var10… pero no con var.
El signo de interrogación “?” Significa que la expresión anterior al mismo debe aparecer 0 ó 1 vez en la cadena
Ej: Patrón: a?bb con la cadenas bb, abb, bbb, cdbb tiene coincidencia
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Expresiones Regulares
Algunos ejemplos
Notación convencional Notación Especial
(aa)*a ^(aa)*a$
(a+b)*ab(a+b)* ^(a|b)*ab(a|b)*$
(0+1+2+3+4+5+6+7+8+9) (0+1+2+3+4+5+6+7+8+9) ^[0-9]{2}$
En la página web
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Backus-Naur Form (BNF)
• Notación utilizada frecuentemente para escribir gramáticas de tipo 2 o libres del contexto.
• Esta notación sigue las siguientes convenciones:
- no terminales se escriben entre < >
- terminales son cadenas de caracteres sin < >
- en lugar de →se utiliza :: =que se lee “se define como”
- varias reglas del tipo
<A> :: =<B1> <A> :: =<B2> ...
<A> :: =<Bn>
Se pueden escribir como
<A> :: =<B1> <B2> ... <Bn>
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Backus-Naur Form (BNF)
Ejemplos:
Ejemplos
( ( ( ) ) )
∈
L
( ( ) )( )
∈
L
( ( )
∉
L
L = { x / x ∈{ (, ) }* y x es una cadena de paréntesis balanceados }
BNF para L
<cadena_par> :: = <parentesis> <parentesis> <cadena_par>
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Backus-Naur Form (BNF)
Ejemplos:
L = { x / x ∈{ begin, end }* y x es una cadena de begin end balanceados }
BNF para L
<lista> :: = <anidados> <anidados> <lista>
<anidados> :: = begin<lista > end begin end
Ejemplos
begin begin end end begin end ∈L
begin begin end ∉L
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Backus-Naur Form (BNF)
BNF para sentencia for de Pascal
<sentencia_for> :: =for<variable>:=<lista_for>do <sentencia>
<lista_for> :: = <exparit> to<exparit> <exparit> downto<exparit>
<variable> :: =a …
z
/*en este ejemplo simplificamos*/<sentencia> :: = <variable>:=<variable> /*en este ejemplo simplificamos*/
<exparit> :: = 0
…
9 /*en este ejemplo simplificamos*/Ejemplos
for i := 1 to 3 do i := j
for i := 1 to 9 do sum:= i
for i = 2 to 9 do k:=i
bien definida según BNF anterior
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Árbol
• El concepto de árbol es muy usado en computación.
• Un árbol es un conjunto de puntos, llamados nodos, unidos por líneas, llamadas arcos. Un arco conecta dos nodos distintos.
Nodo raíz
Rama Nodo hoja
• Propiedades del árbol:
- hay un único nodo distinguido, llamado raíz.
- Un nodo padre puede tener conectados uno o mas nodos hijos. El padre de un nodo se dibuja por encima de los nodos hijos. El nodo raíz no tiene padre. Los nodos hojas no tienen hijos.
- cada nodo es alcanzable desde el nodo raíz mediante un único camino
Nodo interior
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Árbol de derivación
Un árbol es un árbol de derivación para una gramática G = <N, T, P, S> si:
- La raíz del árbol se rotula con S, el símbolo distinguido de G
- Cada nodo interior está rotulado con un símbolo de N
- Cada hoja está rotulada con un símbolo de N ∪T
- Si un nodo interior tiene rótulo A y sus hijos tienen rótulos x1, x2, ..., xnentonces la regla A → x1x2...xn∈P
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Árbol de derivación
Ejemplo:
Sea G = <{A, B}, {a, b, c}, P, S> donde
P = { S→AB, A →aAb, A →ab, B →cB, B →c }
- La cadena aabbccc∈L(G)?
S
a A b
a b
Cadena derivada: aabbccc
A B
c B
c B
c
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
4+5* no es exparit
Árbol de derivación
Ejemplo: BNF para expresiones aritméticas “simplificadas”<exparit> :: = <exparit> +<exparit> <exparit> -<exparit> <exparit> *<exparit>
<exparit> /<exparit> (<exparit>)<numero>
<numero> :: =<digito> <digito><numero>
<digito> :: =01 2 3456 789
4 + 53
<exparit><exparit> + <exparit>
5 3 <digito> 4 <numero> <digito><numero> <numero> <exparit>
<exparit> + <exparit>
4
<digito>
<exparit> * <exparit>
5
<digito>
4+53 es exparit
4+5*
<digito>
<numero>
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Árbol de derivación
Ejemplo: BNF para expresiones aritméticas “simplificadas”
<exparit>
Se quiere derivar la expresión aritmética 3*4 + 5
<exparit> + <exparit>
<exparit> * <exparit>
<numero> 3 <numero> <numero> 4 5 <digito> <digito> <digito> <exparit>
<exparit> * <exparit>
<exparit> + <exparit>
<numero> 4 <numero> 5 3 <digito> <digito>
<exparit> :: = <exparit> +<exparit> <exparit> -<exparit> <exparit> *<exparit>
<exparit> /<exparit> (<exparit>)<numero>
<numero> :: =<digito> <digito><numero>
<digito> :: =01 2 3456 789
<numero>
<digito>
3*4 + 5 3*4 + 5
Si para la misma
cadena
3*4+5
hay dos árboles
diferentes:
BNF es ambiguo
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Gramáticas ambiguas
• En el ejemplo anterior, existen dos árboles de derivación para la misma cadena
→ → →
→gramática ambigua
• Una GLC G es ambigua si existe al menos una cadena de L(G) para la cual hay dos o más árboles de derivación distintos (o dos derivaciones más a la izquierda diferentes).
• Una GLC G es no ambigua si toda cadena de L(G) tiene un único árbol de derivación (o una única derivación más a la izquierda).
• La ambigüedad puede ser un problema para los lenguajes en los que el significado depende, en parte, de la estructura (lenguaje natural, lenguajes de programación). En el ejemplo anterior 3*4+5 puede ser igual a 17 o 27 según el árbol de derivación que se construya.
En algunos casos, dada una gramática ambigua, se puede encontrar otra no ambigua que genera el mismo lenguaje.
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
BNF no ambiguo
Ejemplo: BNF no ambiguo para expresiones aritméticas “simplificadas”
<exparit>
<exparit> + <termino>
<termino> * <factor> <factor>
3
<numero>
<numero>
4
5
<digito> <numero>
<digito>
<exparit> :: = <exparit> +<termino> <exparit> -<termino> <termino>
<termino> :: = <termino> *<factor> <termino> /<factor> <factor>
<factor> :: =(<exparit>)<numero>
<numero> :: =<digito> <digito><numero>
<digito> :: =01 2 3456 789
3*4 + 5
Para
3*4+5
un único árbol de derivación
<digito>
<factor>
En general,
toda cadena ↔un árbol de derivación
entonces este BNF es no ambiguo
<termino>
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
BNF Extendido
• Usa nuevas reglas y símbolos. Sintaxis Significado
::= se define como
t el símbolo terminal t
<nt> el símbolo no terminal nt
(...) usado para agrupar
* cero o más repeticiones del elemento anterior
+ una o más repeticiones del elemento anterior
[...] elemento opcional
| alternativa de varias formas sintácticas válidas
Nota: Para distinguir los metasímbolos de los terminales con el mismo caracter se usa ´
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
BNF Extendido
Ejemplos:
L1= { x / x ∈{ begin, end }* y x es una cadena de begin end balanceados }
BNF para L1
<lista> :: = <anidados>| <anidados><lista>
<anidados> :: = begin<lista > end begin end
ó <lista> :: = <anidados>+
BNF Extendido para L1
<lista> :: = <anidados> <anidados>*
<anidados> :: = begin<lista > end begin end
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Diagramas Sintácticos
• Un diagrama sintáctico está formado por:
- un conjunto de rectángulos etiquetados con nombres de símbolos no terminales
- un conjunto de círculos o elipses etiquetados con nombres de símbolos terminales (tokens),
- un conjunto de arcos que representan las secuencias en las que pueden combinarse los terminales y no terminales de la gramática.
•Cada diagrama representa un símbolo no terminal.
•Todo diagrama posee un punto de entrada (generalmente situado a la izquierda,) y un punto de salida (a la derecha), que están representados por un arco sin origen y un arco sin destino respectivamente.
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Diagramas Sintácticos
• Al igual que en la notación BNF se debe indicar cual es el símbolo distinguido o axioma, a partir del cual comienza la derivación.
•Para reconocer una cadena del lenguaje, se parte del punto de entrada del diagrama correspondiente, y siguiendo algún camino en dicho diagrama, se llega al punto de salida.
Si el camino no existe, la cadena se rechaza.
Cuando en el camino se encuentra un no terminal, el “flujo” continúa recursivamente a través del diagrama sintáctico correspondiente a ese no terminal (la aparición de un no terminal en un diagrama “explota” en otro diagrama que lo define).
•Cualquier camino entre el punto de entrada y el de salida representa una cadena generada por la regla que describe el diagrama.
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
BNF Diagrama sintáctico
<no terminal>
terminal
ε
Secuencia A1 A2… An
Diagramas Sintácticos
Las reglas para la construcción de diagramas sintácticos a partir de una definición BNF son las siguientes:
No terminal
terminal
Diagrama sintáctico para A
1
Diagrama sintáctico para An Diagrama
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
BNF Diagrama sintáctico
Alternativa A1| A2|… | An
[A] (ε| A)
Diagramas Sintácticos
Diagrama sintáctico para A Diagrama sintáctico
para A1
Diagrama sintáctico
para An Diagrama sintáctico
para A2
…
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
BNF Diagrama sintáctico
Repetición A+
(1 ó más veces)
A*
(0 ó más veces)
Diagramas Sintácticos
Diagrama sintáctico
para A
Diagrama sintáctico
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Diagramas Sintácticos
Ejemplos:
BNF Extendido para L1
<lista> :: = <anidados> <anidados>*
<anidados> :: = begin<lista > end begin end
anidados
<lista>
<anidados>
begin end
begin lista end
Diagrama sintáctico para L1
begin begin end end begin end es una lista?
begin end end es una lista?
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
begin begin end end begin end
es una lista?
anidados anidados anidados
<lista> <anidados>
begin end
begin lista end
begin lista end
end begin
end begin
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Diagramas Sintácticos
Ejemplos:
(De FreePascal, compilador usado en Introducción a la Programación I y II, www.freepascal.org)
1) <sentencia> ::= <sentencia simple> | <sentencia estructurada>
sentencia simple
sentencia estructurada
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Diagramas Sintácticos
2) <sentencia estructurada> ::= <sentencia compuesta> | <sentencia condicional> | <sentencia repetitiva> | <sentencia with>
sentencia compuesta
sentencia condicional
sentencia repetitiva
sentencia with
3) <sentencia condicional> ::= <sentencia if> | <sentencia case>
sentencia if
Ciencias de la Computación I - Filminas de Clase – Facultad Cs. Exactas – UNCPBA - 2014
Diagramas Sintácticos
4) <sentencia compuesta> ::= begin <sentencia> (; <sentencia>)* end
5) <sentencia if>::= if <condicion> then <sentencia> [else <sentencia>]
begin sentencia end
;
if condicion then sentencia