Está en la página 1de 17

 

 
Instituto Tecnológico de Santo Domingo 
 
 

Lenguajes Formales Expresiones 


Regulares 
 
 
 
 
Grupo A (integrantes): 
 
Alejandro Encarnación  1086298 
Denys Rosario 1064649 
Frank Chávez 1085268 
Kelvin Lee  1087781 
Mikhael Santos  1088621 
Víctor Montero  1067196 
Mark Benítez 1086207 
César López 1075815 
 
 
Asignatura: 
 
Matemática Discreta II 
Sección: 01 
Profesor: Fernando Hirujo Arturo Pichardo 

Índice 
 

1. Introducción 3 

2. Lenguajes Formales 4 
2.1. Definición 4 
2.2. Partes de un lenguaje formal 4 
2.3. Un poco de historia 5 
2.4. Ejemplos 6 
2.4.1. Ejemplos de notaciones de alfabeto 6 
2.4.2. Ejemplo de lenguaje formal 6 

3. Historia del lenguaje formal 7 

4. Aplicación del lenguaje formal en lenguajes de programación 7 

5. Notación polaca 8 

6. Clausura de Kleene 8 

7. Conceptos básicos de expresiones regulares 8 

8. Historia de Expresiones regulares 10 

9. Usos prácticos de expresiones regulares 10 

10. Conclusión 11 

11. Preguntas de Autoevaluación 12 

12. Referencias Bibliográficas 13 


 
 
 
 
 
 
 
 
 
 

 
 

1. Introducción 
 
Los  lenguajes  formales  forman  parte  de  la  increíble  historia  acerca  de  la 
computación,  y  actualmente  se  encuentra  definida  como  un  área  importante 
tanto en matemáticas como en ciencias de la computación.  
 
En  el  presente  trabajo  describimos  en  detalle  qué  son los lenguajes formales, 
cómo  construirlos,  operaciones  que  se  pueden  realizar,  y  describimos 
también  una  de  las  maneras  para  describir  lenguajes  formales,  las 
expresiones regulares.  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

2. Lenguajes Formales 
 

2.1. Definición 
Un  lenguaje  formal  consiste en palabras cuyas letras están tomadas de 
un  alfabeto  y  están  bien  formadas  de  acuerdo  con  un  conjunto 
específico de reglas (las cuales pueden ser completamente arbitrarias). 
 
Más  formalmente:  Un  lenguaje  formal  L  sobre  un  alfabeto  Σ  es  un 
subconjunto  de  Σ*,  es  decir,  un  conjunto  de  palabras  sobre  ese 
alfabeto.  

2.2. Partes de un lenguaje formal 


Un  lenguaje  formal  se  encuentra  compuesto  por  los  siguientes 
elementos: 
 
● Alfabeto​.  Un  alfabeto​,  ​en  este  contexto,  es  un  conjunto  de 
caracteres.  Estos  pueden  ser  letras  del  alfabeto,  número  u  otros 
símbolos;  para  fines  prácticos,  cualquier  símbolo  puede  ser 
usado como caracter. 
 
Algunas consideraciones: 
 
- Se  suele  utilizar  la  letra  Σ  para  denotar  un  alfabeto. 
Haremos uso de esta notación más adelante. 
 
- Se  usan  los  símbolos  e,  ε,  λ  o  incluso  Λ  para  denotar  una 
palabra  de  longitud  0..  Por  concatenación  se  pueden 
combinar  dos  palabras  para  formar  una  nueva  palabra, 
cuya  longitud  es  la  suma  de  las  longitudes  de las palabras 
originales.  El  resultado  de  concatenar  una  palabra  con  la 
palabra vacía es la palabra original. 

 
- Σn :  conjunto  de  todas  las  cadenas  sobre  Σ   que  tienen 
longitud n. 
 
- Σ+ :  conjunto  de  todas  las  cadenas  sobre  Σ   que  tienen  al 
menos longitud 1. 
 
- Σ* conjunto de todas las cadenas sobre Σ . 
 
● Letras​.  A  cada  elemento  dentro del alfabeto se le denomina letra​. 
La  cantidad  de  letras  en  un  alfabeto  puede  ser  infinita.  Pero,  en 
lo  que  respecta  a  esta  unidad,  solo  estaremos  tratando  con 
elementos finitos. 
 
● Palabras.  ​Una  palabra  sobre  un  alfabeto  puede  ser  cualquier 
secuencia  finita  (es  decir,  una  cadena)  de  letras  que  es  parte  del 
alfabeto. 
 
Para  denotar  al  ​conjunto  completo  de  palabras  dentro  de  un 
alfabeto  se  utiliza  ​Σ*  (usando  la  estrella  de  Kleene  ).  L
​ a  longitud 
de una palabra es el número de letras que la componen​. 
 

2.3. Ejemplos 

2.3.1. Ejemplos de notaciones de alfabeto 

Sea ∑ = {m, k } , el alfabeto a usar, encontrar: 

- Σ0 = {ϕ}  
- Σ1 = {m, k}  
- Σ2 = {mm, kk, mk, k m}  
- Σ+ = {m, k, mm, kk, mk, km, mmm, kkk, mmk, mkk...}  
- Σ* = {ϕ, m, k, mm, kk, mk, km, mmm, kkk, mmk, mkk...}  
 

Como  se  puede  observar,  el  primero,  Σ0 hace  referencia  al 


conjunto vacío. Este lo hemos representado con el símbolo ϕ  
 
La  notación  Σ1 indica  que  se  muestre  los  elementos  del  alfabeto 
con longitud 1, Σ2 con longitud 2. 
 
Entonces,  la  notación  Σ+   hace  referencia  a  todas  las  cadenas 
que  pueden  ser  formadas  con  ese  alfabeto  con  al  menos  una 
longitud 1. En este caso, son infinitas. 
 
Y  por  último  la  notación  Σ*   hace  referencia  a  todas  las  cadenas 
que  pueden  ser  formadas  con  este  alfabeto,  las  cuales  son 
infinitas  también.  Cabe  resaltar que aquí sí se incluye el elemento 
vacío o nulo. 

2.3.2. Ejemplo de lenguaje formal 


Para  hacer  un  lenguaje  simplemente  necesitamos  un  alfabeto  y 
una  serie  de  reglas  que  servirían  para  restringir  cuáles  palabras 
se encuentran dentro del lenguaje. 
 
A continuación, vamos a mostrar un lenguaje formal de ejemplo: 
 

Sea  L el  ​lenguaje  formal,  y  ∑ = {m, k } el ​alfabeto a utilizar, formado 

por  las  ​letras  ​m  y  k:  Las reglas para definir ​palabras en  L  son las 


siguientes: 
 
- Toda palabra debe comenzar con la letra m . 
- Toda palabra debe finalizar con la letra k . 
 
Acabamos  de  definir  nuestro  lenguaje,  entonces  para  saber  si 
determinada  cadena  de  caracteres  o  palabra  se  encuentra 
definida  en  L   es  bien  sencillo.  A  continuación,  vamos  a  mostrar 

una  serie  de  palabras  (cadenas  de  caracteres)  y  vamos  a  indicar 


si se encuentran definidas en L  
 
- “km”:  NO  se  encuentra  definido  en  L,  de  acuerdo  a  la 
primera regla del lenguaje. 
 
- “mk”: SÍ se encuentra definido en L. 
 
- “mkm”:  NO  se  encuentra  definido  en L, ya que incumple con 
la segunda regla. 
 
- “mkmk”: SÍ se encuentra definido en L. 

3. Historia del lenguaje formal 


 
Se  cree  que  el  primer  lenguaje  formal  es  el  utilizado  por  Gottlob  Frege  en  su 
Begriffsschrift  (1879),  que  significa  literalmente  "escritura  conceptual",  y  que 
Frege describió como un "lenguaje formal de pensamiento puro". 
 
Axel  Thue  ‘s  temprano  sistema  semi-Thue,  que  se  puede  utilizar  para  volver a 
escribir las cadenas, era influyente en las gramáticas formales. 
 
Sin  embargo,  fue  en  los  años  de  1950,  cuando  Noam  Chomsky,  por  sus 
investigaciones  en  lenguajes  de  alto  nivel,  se  encuentra  descubriendo  los 
principios  subyacentes  por  medio  de  los  cuales  los  seres  humanos  generan 
palabras.  Esto  lo  llevó  a  desarrollar  una  teoría  de  lenguajes  formales,  que 
definió  empleando  conjuntos  de  reglas  abstractas,  llamadas  gramáticas,  de 
diversos  niveles  de  complejidad.  Y  en  1956,  Noam  Chomsky  creó  la  jerarquía 
de Chomsky para organizar los distintos tipos de lenguaje formal. 
 
 
 
 
 

4.  Aplicación  del  lenguaje  formal  en 


lenguajes de programación 
 
Un  compilador  es  un  programa  de  computadora  que  transforma  el  código 
fuente  escrito  en  un  lenguaje  de  programación  hacia  un  lenguaje  de 
máquina. Este proceso se encuentra compuesto de dos partes:  
 
1. Análisis.  
a. El  análisis  léxico  divide  el  texto  del  código  fuente  en  pequeñas 
piezas  llamadas tokens. Cada token es una única unidad atómica 
del idioma, dígase, una palabra clave, identificador o símbolo.  
b. El  análisis  sintáctico  es  el  proceso de analizar un texto, hecho de 
una  secuencia  de  tokens,  para  determinar  su  estructura 
gramatical con respecto a una gramática formal dada.  
c. El  análisis  semántico  es  la  fase  en  la  cual  el  compilador  agrega 
información semántica al árbol de análisis y construye la tabla de 
símbolos.  Esta  fase  realiza  comprobaciones  semánticas  como  la 
comprobación  de  tipos  y  la  vinculación  de  objetos,  rechazando 
programas incorrectos o emitiendo advertencias.  
 
2. Síntesis. ​Implica convertir la representación intermedia en un programa 
en ejecución 

5. Notación polaca 
 
La  notación de prefijo, también conocida como notación polaca (en homenaje 
a  Jan  Łukasiewicz  por  crearla  en  1942),  de  infijo  y  de  postfijo(conocida  como 
polaca  inversa)  son  formas  de  escritura  de  expresiones  algebraicas  que  se 
diferencian  por  la  posición  relativa  que  toman tanto los operadores como los 
operandos.  
 
Las  diferentes  formas  de  escribir  la  expresión  algebraica  (5  +  7),  son  las 
siguientes: 

 
● Prefijo: (+ 5 7), se evalúa de derecha a izquierda. 
● Infijo: (5 + 7), se evalúa como una operación normal. 
● Postfijo: (5 7 +), se evalúa de izquierda a derecha. 
 
Donde  cada  una  da  el  mismo  resultado,  claro  está,  siguiendo  los  pasos 
correspondientes.  Las  ventajas  de  usar  la  notación  polaca  y  polaca invertida 
es  que  no  se  ven en la necesidad del uso de paréntesis para poder resolver la 
operación.  Por  ejemplo,  la  operación  infija  5*(12  +  4),  en  notación  polaca  se 
puede representar como *5 + 12 4 o en postfijo como 5 12 4 + *.  

6. Clausura de Kleene 
 
La  clausura  de  Kleene  (también  llamada  estrella  Kleene  o  cierre  estrella)  es 
una  operación  unaria  que  se  aplica  sobre  un  conjunto  de  cadenas  de 
caracteres  o  un  conjunto  de  símbolos  o  caracteres  (alfabeto),  y  representa  el 
conjunto de las cadenas que se pueden formar tomando cualquier número de 
cadenas  del  conjunto  inicial,  posiblemente  con  repeticiones,  y 
concatenándolas entre sí. 

7.  Conceptos  básicos  de  expresiones 


regulares 
 
Las  Expresiones  regulares  son  cadenas  de  caracteres  basadas  en  reglas 
sintácticas que permiten describir secuencias de caracteres. 
 
Las  expresiones  regulares  son  las  unidades  de  descripción  de  los  lenguajes 
regulares, que se incluyen en los denominados lenguajes formales. 
 
Para  cada  expresión  regular  existe  un  denominado  autómata  finito  que 
acepta  el  lenguaje  especificado  por  la  expresión  y  que,  con  ayuda  de  la 
construcción de Thompson, se desarrolla a partir de una expresión regular. 
 

Una  expresión  regular  puede  estar  formada,  o  bien  exclusivamente  por 


caracteres  normales,  o  bien  por  una  combinación  de  caracteres  normales  y 
metacaracteres.  Estos  caracteres  especiales  se  pueden  agrupar  en  distintos 
grupos: 
 
Caracteres: 

Caracte Definición 

\d  Dígitos 0-9 

\D  Cualquier caracter menos dígitos 0-9 

\w  Caracter de unicode, ideograma, digito o guion bajo 

\W  Cualquier caracter menos caracter de unicode, ideograma, digito 


o guion bajo 

\s  Espacios en blanco 

\S  Cualquier caracter menos espacios en blancos 

.  Cualquier caracter excepto saltos de lineas 

\  Ignorar caracteres especiales 


 
Cuantificadores: 

Caracter  Definición 

+  1 o más veces 

*  0 o más veces 

?  Una vez o ninguna 

{#}  Exactamente la cantidad de veces especificada 

{#1,#2}  De #1 veces a #2 veces 

{#,}  La cantidad deveces especificadas o más 


 
Lógicos: 

Caracter  Definición 

|  “O”, este o el otro 

( ... )  Crear un grupo 


10 

 
Clases de caracteres: 

Caracter  Definición 

[ ... ]  Uno de los caracteres entre los corchetes 

-  Indicador de rango 

[A-Z]  Uno de los caracteres en el rango establecido 


 
Bordes: 

Caracte Definición 

^  Inicio de una cadena de caracteres 

$  Fin de una cadena de caracteres 


 
 

8. Historia de Expresiones Regulares 


El  concepto  surgió  en  la  década  de  1950  cuando  el  matemático 
estadounidense  Stephen  Kleene  formalizó  la  descripción  de  un  lenguaje 
regular.  El  concepto  entró  en  uso  común  con  Unix  utilidades  de 
procesamiento de textos.  

● 1943​: Warren McCuloch y Walter Pitts crearon las bases de las 


expresiones regulares para la neurociencia. 
● 1956​: Stephen Kleene le da un modelo algebraico y las nombra 
“expresiones regulares”. 
● ​ /Regular 
1968​: Ken Thompson integra las “regex” a un editor UNIX: ed. g
expression/p = grep 
● 1970​: grep se convierte muy popular en UNIX (awk, vi, emacs) 
● 1980​: grep se convierte en egrep (extended) 
● 1986​: POSIX (Portable Operating System Interface) la X es de UNIX 
○ Basic Regular expression (BREs) 
○ Extended Regular Expression (EREs) 
● 1986​: Henry Spencer crea una librería de “regex” para C 
● 1987​: Larry Wall crea Perl 
11 

9. Usos prácticos de expresiones regulares 


 
Las  expresiones  regulares  se  utilizan  en  varios  campos  de  la  ciencia  en 
general. A continuación se citan unos cuantos ejemplos de sus aplicaciones: 
● Son  utilizadas  en  los  editores  de  textos  para  buscar  contexto  y 
reemplazar palabras. 
● Se  utilizan  en  compiladores  para identificar palabras clave, constantes, 
operadores, etc. 
● Se  utilizan  en  lenguajes  de consulta de base de datos y en lenguajes de 
procesamiento de archivos como AWK. 
● Se  utilizan  en  UNIX  como  funciones  grep,  egrep  y  fgrep,  en  el  editor  de 
texto QED, vi, sed y Emacs. 
 
En  los  lenguajes  de  programación  (como  python)  es  común  que  se  emplee 
notación  de  expresiones  regulares  llamada  ​clase  de caracter ​[carácter inicial 
- carácter final]  

 
 

    
12 

10. Conclusión 
En  retrospectiva,  por  medio  del  trabajo  de  investigación  realizado,  pudimos 
determinar  que  los  lenguajes  computacionales  son  capaces  de  asimilarse  a 
lenguajes  como  inglés,  pues  por  medio  del  primero  podemos formar cadenas 
de  caracteres  de  acuerdo  a  ciertas  reglas  para  formar  programas 
sintácticamente correctos.  
 

    
13 

11. Preguntas de Autoevaluación 


A  continuación,  una  serie  de  preguntas  que  abarcan  la  esencia  de  los  temas 
que hemos tratado en el presente trabajo:  
 
1. ¿Qué es un lenguaje formal? 
 
Es  un  conjunto  ​palabras  formadas  con  un  conjunto  de  símbolos 
​ iendo  construidas  (las  palabras)  con  un  conjunto 
denominados  ​letras  s
específico de reglas (las cuales pueden ser completamente arbitrarias). 
 
2. ¿Qué son letras (en el contexto de lenguajes formales)? 
 
Son  símbolos  o  caracteres que conforman parte de lo que se denomina 
un  “alfabeto”  y  representa  los  caracteres  o  símbolos  válidos  para  un 
determinado lenguaje. 
 
3. ¿Cuál  aplicación  posee  el  lenguaje  formal  en  cuanto  a  lenguajes  de 
programación?  
 
Una  de  las  aplicaciones  del  lenguaje  formal  resulta  en  la  creación  de 
compiladores,  el  cual  transforma  el  código  fuente  escrito  en  un 
lenguaje  de  programación  hacia  un  lenguaje  entendible  para  la 
computadora.  
 
4. ¿Cuáles partes conforman el proceso de compilación? 
Cada compilación consta de dos partes: análisis y síntesis.  
 
5. ¿Cuál es el resultado de la expresión en notación polaca - 5 * 6 7? 
Primero  multiplicamos  6  *  7  que  nos  da  42, luego restamos 5 - 42, lo que 
nos daría -37. 
 
6. ¿Cómo sería la notación polaca en la expresión (A + B) * (C -D)? 
Su correspondiente en notación polaca seria A B + CD - *. 
14 

 
7. ¿Quién formalizó la descripción del lenguaje regular? 
El  matemático  estadounidense Stephen Kleene promovió el surgimiento 
de este concepto. 
 
8. ¿Cuál  fue  el  sistema  operativo  que  integró  primero  las  expresiones 
regulares? 
 
Ken Thompson integró las r​ egex​ a un editor del sistema UNIX (​grep​). 
 
9. ¿Qué son las expresiones regulares? 
Las  Expresiones  regulares  son  cadenas  de  caracteres  basadas  en 
reglas sintácticas que permiten describir secuencias de caracteres. 
10. ¿Cómo pueden estar formadas las expresiones regulares? 
Una  expresión  regular  puede  estar  formada,  o bien exclusivamente por 
caracteres  normales,  o  bien  por  una  combinación  de  caracteres 
normales y metacaracteres.  
 
11. ¿Cuándo se usó por primera vez el lenguaje formal? 
Se  cree  que  el  primer  lenguaje  formal  es  el  utilizado  por  Gottlob  Frege 
en  su  Begriffsschrift  (1879),  que  significa  literalmente  "escritura 
conceptual",  y  que  Frege  describió  como  un  "lenguaje  formal  de 
pensamiento puro". 
 
12. ¿Cómo Noam Chomsky aportó a la clasificación del lenguaje formal? 
Descubrió  los  principios  subyacentes  por  medio  de  los  cuales  los seres 
humanos generan palabras y creó la Jerarquía de Chomsky. 
 
13. ¿Qué otras aplicaciones utilizan expresiones regulares? 
JavaScript  y  C# son otros lenguajes que utilizan expresiones regulares, 
pero en estos son tratados como objetos. 
 
14. ¿Qué otros usos tiene las expresiones regulares? 
Las  expresiones  regulares,  además  de  buscar  cadenas  de  caracteres 
en  un  string,  sirven  para  validar  que  la  información  introducida  por un 
15 

usuario  se  ajusta  a  un  formato  establecido.  Esto  se  hace  comparando 
el input del usuario con una expresión regular. 
 
   
16 

12. Referencias Bibliográficas 


Compiler. (n.d.). Retrieved from 

http://zasoby.open.agh.edu.pl/~11sustrojny/en/compiler/index.html#:~:text

=A compiler consists of three,programming language syntax and 

semantics. 

Expresiones Regulares. (n.d.). Retrieved from 

https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Regular_Ex

pressions#:~:text=Las expresiones regulares se utilizan,explicados en la 

Referencia JavaScript.&text=Un método RegExp que ejecuta,una 

coincidencia en una cadena. 

Expresión regular. (2020, May 25). Retrieved from 

https://es.wikipedia.org/wiki/Expresión_regular 

Formal language. (2020, April 05). Retrieved from 

https://en.wikipedia.org/wiki/Formal_language 

Tomé, C. (2019, February 12). La notación polaca, la de Jan Łukasiewicz. 

Retrieved from 

https://culturacientifica.com/2019/02/13/la-notacion-polaca-la-de-jan-luk

asiewicz/ 

Zealand, P. –, Pythia, Mark, Amrut, P., Italy, A. M., Maiorana, A., . . . Prakash, V. 

(n.d.). Quick-Start. Retrieved from 

https://www.rexegg.com/regex-quickstart.html 

También podría gustarte