Compiladores Efrain 7-5

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

Universidad de Guayaquil

Facultad de Ciencias Matemáticas Y Física

Carrera de Ingeniería en Sistemas Computacionales

Tema:

Expresiones regulares

Estudiante:

Efrain Velásquez

Materia:

compiladores

Curso:

7-5
Ejercicio 3.3.1: Consulte los manuales de referencia del lenguaje para determinar:
1) Los conjuntos de caracteres que forman el alfabeto de entrada (excluyendo aquellos
que sólo puedan aparecer en cadenas de caracteres o comentarios)
a) C
En la elaboración de programas en C se pueden utilizar para formar los
elementos básicos (constantes, variables, operadores, expresiones) las letras
mayúsculas de la A a la Z, las minúsculas de la a a la z , los dígitos del 0 al 9 y
ciertos caracteres especiales:
! * + \ " <
# ( = | { >
% ) ~ ; } /
^ - _ [ : '
? & . ] (blanco)
b) C++
El conjunto de caracteres que se pueden usar en un programa C++ para dar
nombre a variables, constantes, funciones, clases, etc, etc son los siguientes:

- Letras mayúsculas y minúsculas de la A(a) a la Z(z) del alfabeto inglés.

- Dígitos del 0 al 9.

- El carácter subrayado o guión bajo _

- Caracteres especiales y signos de puntuación:


+ - * / = % & # ! ? ^ “ ‘ ~
\ | < > ( ) [ ] { } : ; . ,

- Espacios en blanco: Se llaman espacios en blanco a todos los caracteres cuya


misión es separar elementos de un programa.

Los caracteres espacios en blanco que pueden aparecer en un programa C++


son los siguientes:

el espacio en blanco
tabulador horizontal
tabulador vertical
avance de página
nueva línea

- Secuencias de escape: Una secuencia de escape esta formada por una barra
inversa seguida de una letra o de una combinación de dígitos.

Una secuencia de escape siempre representa un solo carácter aunque se escriba


con dos o más caracteres.

Se utilizan para realizar acciones como salto de línea o para usar caracteres no
imprimibles.

Las secuencias de escape definidas en C++ son:

c) C#

d) Fortran

El conjunto de caracteres admisible para FORTRAN es el siguiente :


• Las letras
ABCDEFGHIJKLMNOPQRSTUVWXYZ
• los digitos 0 1 2 3 4 5 6 7 8 9
• los caracteres especiales

e) Java
Los caracteres que pueden aparecer en un programa Java para formar las constantes,
variables, expresiones, etc., son:
◦ Las letras mayúsculas y minúsculas de la A(a) a la Z(z) de los alfabetos
internacionales (la ñ y Ñ son válidas)
◦ Dígitos (0, 1, 2, ...)
◦ Los caracteres ' _ ' '$' y cualquier carácter unicode por encima del 00C0.
◦ Los caracteres especiales y signos de puntuación siguientes:
+-*/=%&#!?^“‘~\|<>()[]{}:;.,
◦ Espacios en blanco: en programación se llaman espacios en blanco no solo a
los caracteres generados por la barra espaciadora. Además de espacios,
también se llaman espacios en blanco a los siguientes caracteres: tabulador
y salto de línea. Su labor es la misma que la de un espacio en blanco, hacer
de separadores entre los distintos elementos de un programa.
f) Lisp
g) SQL
2) La forma léxica de las constantes numéricas
a) C
Las constantes enteras: Este tipo de constantes pueden estar escritas en 3
tipos de sistemas numéricos, como son, el decimal, octal, y hexadecimal.
• Si la constante empieza por cero esta sería una constante entera escrita
en octal (solo llevara del 0 al 7).
• Si la constante empieza por 0 o x será una constante entera escrita en
hexadecimal (0 > 9 >F).
• En caso de no cumplirse estas condiciones anteriores estaríamos ante
una constante entera decimal.
Las constantes de coma flotante o decimal
Distinguen la parte decimal de la entera por un punto, para el añadido de
exponentes usa la letra “E”.
b) C++
Existen dos maneras de declarar los valores constantes en c++: mediante
una expresión, con #define o mediante el uso de const, que de esta forma se
toma como un término.
#define
esta instrucción nos permite declarar constantes de una manera sencilla de
la siguiente forma:
#define const;
debemos tener en cuenta que la instrucción define nos genera una expresión
que no puede tomarse como tipo de dato en un flujo, por lo que no es la
manera correcta de declarar una constante en c++.
const
Esta instrucción nos permite declarar una constante de una mejor manera y
mas en el contexto de término, estas poseen un tipo de dato asociado y por
lo tanto es el estándar para declarar en c++.
const tipo_de_dato nombre_de_la_constante = valor_de_la_constante;
Las expresiones de depurador pueden utilizar constantes enteras en formato
octal, hexadecimal o decimal. De forma predeterminada, el depurador espera
constantes decimales. Esta configuración se puede cambiar en la página
General de la ficha Depuración.
Puede utilizar símbolos de prefijo o sufijo para representar números en otra
base. En la siguiente tabla se muestran los formatos que se pueden utilizar.

c) C#
const tipo_de_dato nombre_de_la_constante = valor_de_la_constante;
ejemplo: const float PI = 3.1416;
d) Fortran
Existen ocho tipos :
Enteras, Reales, Doble precisi´on, Complejas, Octales, Hexadecimales,
L´ogicas, Tipo car´acter y Tipo Hollerith. Las de tipo octal, hexadecimal y
Hollerith no tienen tipo de datos. Asumen el tipo conforme al contexto en que
aparecen.

e) Java
f) Lisp
g) SQL
3) La forma léxica de los identificadores
a) C
El primer símbolo del identificador será un carácter alfabético (a, ….,z, A,…,Z,’_’).
Después de ese primer carácter podremos poner caracteres alfanuméricos (a,
….,z)y(0, 1, …,9) y el guion de subrayado ‘_’.
Las mayúsculas y minúsculas se consideran diferentes. El guion de subrayado se
interpreta como una letra más y los identificadores no pueden coincidir con las
palabras reservadas. El número de caracteres de un identificador nunca debe
sobrepasar los 31
Ejemplos validos:
a, pepe, r456, tu_re_da, AnTeNa, antena
Ejemplos no validos:
345abc, mi variable, Nombre.Largo, cañada, camión
b) C++
Hay una reglas básicas para formar un identificador en C++ que siempre se
deben cumplir:
Están formados de uno o más caracteres. Los siguientes caracteres son válidos
como cualquier carácter de un identificador:
(_ , a...z, A….Z)
Los siguientes caracteres son válidos para cualquier carácter de un identificador
excepto el primero:
(0….9)
Las letras pueden ser minúsculas o mayúsculas del alfabeto inglés. Así pues, no
está permitido el uso de las letras ‘ñ’ y ‘Ñ’.
No pueden existir dos identificadores iguales que hagan referencia a dos
elementos de distinta naturaleza en un programa. Lo cual no quiere decir que un
identificador no pueda aparecer más de una vez en un programa.
El primer carácter de un identificador debe ser un carácter alfabético, en
mayúsculas o minúsculas, o un carácter de subrayado (_). Debido a que los
identificadores de C++ distinguen entre mayúsculas y minúsculas,
nombreArchivo es diferente de nombrearchivo.
c) C#
Un identificador es el nombre que se asigna a un tipo (clase, interfaz, struct,
delegado o enumeración), miembro, variable o espacio de nombres. Los
identificadores válidos deben seguir estas reglas:
Los identificadores deben comenzar con una letra, o _.
Los identificadores pueden contener caracteres de letra Unicode, caracteres de
dígito decimales, caracteres de conexión Unicode, caracteres de combinación
Unicode o caracteres de formato Unicode. Para obtener más información sobre
las categorías Unicode, vea la base de datos de categorías Unicode. Puede
declarar identificadores que coincidan con palabras clave de C# mediante el
prefijo @ en el identificador. @ no forma parte del nombre de identificador. Por
ejemplo, @if declara un identificador denominado if. Estos identificadores
textuales son principalmente para la interoperabilidad con los identificadores
declarados en otros lenguajes.
d) Fortran
La primera letra de una variable indica si por defecto es creada como entero o
como flotante.
e) Java
Características de un identificador Java:
• Están formados por letras y dígitos.
• No pueden empezar por un dígito.
• No pueden contener ninguno de los caracteres especiales vistos en una
entrada anterior.
• No puede ser una palabra reservada de Java. Las palabras reservadas
en Java son todas las que aparecen en el punto siguiente.
Los caracteres ñ y Ñ como las vocales acentuadas son caracteres válidos
para crear identificadores en Java.
Java diferencia mayúsculas y minúsculas, por lo tanto, nombre y Nombre son
identificadores distintos.
f) Lisp
Utilizan un léxico similar al de los identificadores de otros lenguajes de
programación, aunque permiten la inclusión de muchos caracteres
alfanuméricos dada la particular (y generosa) forma sintáctica de Lisp, como
guiones y barras. En la figura 1 podemos ver dos átomos de tipo símbolo, siendo
sus valores a y c.
No se distinguen may-min para identificadores.
g) SQL
(1)El primer carácter debe ser alguno de los siguientes:
1. Una letra, tal como se define en el estándar Unicode 3,2. La definición Unicode
de letras incluye los caracteres latinos de la “a” a la “z” y de la “A” a la “Z”,
además de los caracteres de letras de otros idiomas.
2. El signo de subrayado (), arroba (@) o número (#).
3. Ciertos símbolos al principio de un identificador tienen un significado
especial en SQL Server. Un identificador normal que comience por el signo
arroba siempre denotará una variable local o un parámetro, y no se puede
usar como nombre de ningún otro tipo de objeto. Un identificador que
empieza con el signo de número indica una tabla o procedimiento temporal.
Un identificador que empieza con un signo de número doble (##) indica un
objeto temporal global. Aunque es posible utilizar los caracteres de signo de
número o doble signo de número para comenzar los nombres de otros tipos
de objetos, no se recomienda hacerlo.
4. Algunas funciones de Transact-SQL tienen nombres que empiezan con un
doble signo de arroba (@@). Para evitar confusiones con estas funciones, se
recomienda no utilizar nombres que empiecen con @@.
1) Los caracteres subsiguientes pueden ser:
1. Letras, tal como se definen en el estándar Unicode 3,2.
2. Números decimales del alfabeto Latín básico u otros
alfabetos de otros idiomas.
3. El signo de arroba, dólar ($), número o subrayado.
2) El identificador no debe ser una palabra reservada de Transact-SQL . SQL Server
se reserva las versiones en mayúsculas y minúsculas de las palabras
reservadas. Cuando se utilizan en instrucciones Transact-SQL , los
identificadores que no cumplan estas reglas deben aparecer delimitados por
comillas dobles o corchetes. Las palabras reservadas dependen del nivel de
compatibilidad de la base de datos. Este nivel se puede establecer mediante la
instrucción ALTER DATABASE
3) No se permiten los caracteres especiales o los espacios incrustados.
4) Los caracteres complementarios no están permitidos.Cuando se utilizan en
instrucciones Transact-SQL , los identificadores que no cumplan estas reglas
deben aparecer delimitados por comillas dobles o corchetes.
Ejercicio 3.3.2: Describa los lenguajes denotados por las siguientes expresiones
regulares:
a) a(a|b)*a.
Debe ir una ‘a’ seguido de 0 o mas ‘a’ o ‘b’.
b) ((ǫ|a)b*)*.
Se puede escribir 0 o mas veces el conjunto de 0 o mas veces de (q o a) y b.
c) (a|b)*a(a|b)(a|b).
0 o mas veces a o b y a + a o b + a o b
d) a*ba*ba*ba*.
0 o mas veces de a + 0 o mas veces de ba 2 veces mas
e) (aa|bb)*((ab|ba)(aa|bb)*(ab|ba)(aa|bb)*)*.
0 o mas veces de aa o bb luego 0 o mas veces del conjunto 2 veces de 0 o mas
veces de ab o ba y aa o bb

Ejercicio 3.3.3: En una cadena de longitud n, ¿cuántos de los siguientes hay?


a) Prefijos.
b) Sufijos.
c) Prefijos propios.
d) Subcadenas.
e) Subsecuencias.

Ejercicio 3.3.4: La mayoría de los lenguajes son sensibles a mayúsculas y


minúsculas, por lo que las palabras clave sólo pueden escribirse de una forma, y las
expresiones regulares que describen su lexema son muy simples. No obstante,
algunos lenguajes como SQL son insensi-bles a mayúsculas y minúsculas, por lo que
una palabra clave puede escribirse en minúsculas o en mayúsculas, o en cualquier
mezcla de ambas. Por ende, la palabra clave SELECT de SQL también puede escribirse
como select, Select o sElEcT. Muestre cómo escribir una expresión regular para una
palabra clave en un lenguaje insensible a mayúsculas y minúsculas. Ilustre la idea
escribiendo la expresión para “select” en SQL.
/(s|S)(e|E)(l|L)(e|E)(c|C)(t|T)/

Ejercicio 3.3.5: Escriba definiciones regulares para los siguientes lenguajes:


a) Todas las cadenas de letras en minúsculas que contengan las cinco vocales en orden.
(a|A)(e|E)(i|I)(o|O)(u|U)
b) Todas las cadenas de letras en minúsculas, en las que las letras se encuentren en orden
lexicográfico ascendente.

c) Comentarios, que consistan de una cadena rodeada por /* y */, sin un */ entre ellos, a
menos que se encierre entre dobles comillas (").
/^[/*]([a-zA-Z0-9]*[“*/”]*[“/*”]*)*[*/]$/

También podría gustarte