| INSTITUTO POLITÉCNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO |

Introducción | Contenido | Bibliografía

Introducción
Contenido
UNIDAD I
UNIDAD II
UNIDAD III Introducción 3.1 Token y Lexemas 3.2 Algoritmo de los dos Buffers 3.3 Expresiones regulares

3.4 Definición y ejemplos de AFN

3.5 Definición y ejemplos de AFD

3.6 Construcción de un AFN a partir de una expresión regular

3.7 Conversión de un AFN a AFD (Construcción de subconjuntos)

3.8 Lenguaje LEX

3.9 Escritura de Programas LEX

UNIDAD IV
UNIDAD V
UNIDAD VI
UNIDAD VII
UNIDAD VIII
UNIDAD IX
PROBLEMARIO
Bibliografía

3.1 Token y Lexemas

> En los lenguajes de programación a las construcciones que se les considera componentes léxicos o tokens, los cuales se refieren a las palabras claves, operadores, identificadores, constantes, cadenas, literales, y signos de puntuación como paréntesis, punto y coma, y coma.

> Token: Es el nombre de cada cadena de caracteres que define una construcción que representa una palabra.

> Lexema: Es una secuencia de caracteres de la cadena de entrada que corresponde a un token.

> Patrón: Forma compacta de describir al conjunto de lexemas.

> De acuerdo a estas definiciones, se resalta que:

> - Un token o componente léxico corresponde a un patrón.

> - Un token o componente léxico corresponde a un lexema.

> Otra forma de definir patrón y lexema, es:

> Patrón: es una regla que genera la secuencia de caracteres que puede representar a un determinado componente léxico (una expresión regular).

> Lexema: es una cadena de caracteres que concuerda con un patrón que describe un componente léxico. Un componente léxico puede tener uno o infinitos lexemas. Por ejemplo: palabras reservadas tienen un único lexema, los números y los identificadores tienen infinitos lexemas.

> La siguiente tabla indica ejemplos de tokens, lexemas y patrones.

> Los componentes léxicos se suelen definir como un tipo enumerado, los cuales se codifican como enteros. También se suele almacenar la cadena de caracteres que se acaba de reconocer (el lexema), que se usara posteriormente para el análisis semántico.

> typedef enum { TKN IF, TKN THEN, TKN NUM, TKN ID, TKN OPADD,...} TokenType;

> Es importante conocer el lexema (para construir la tabla de símbolos), donde los componentes léxicos se representan mediante una estructura registro con tipo de token y lexema:

> typedef struct {
> TokenType token;
> char *lexema; //se reserva memoria dinamicamente
> } TokenRecord;
> TokenRecord getToken(void);

> La especificación de los componentes léxicos, por medio de las expresiones regulares.

> Los componentes léxicos se especifican haciendo uso de expresiones regulares.

> Además de las tres operaciones básicas: concatenación, repetición (*) y alternativas (|), se usan los siguientes metasímbolos:

> El símbolo + expresa una o más repeticiones. r+ indica una o más repeticiones de r.

> (0|1)+ = (0|1)(0|1)*

> Para indicar cualquier carácter, se expresa de la siguiente manera:

> .*b.* indica cualquier cadena que contiene una letra b.

> Un rango de caracteres [ ] (clase). [a-z] indica cualquier carácter entre la a y z minúsculas. [a-zA-Z] indica cualquier letra del abecedario minúscula o mayúscula.
> [0-9] indica cualquier digito de 0 a 9. [abc] indica a | b | c.

> Para expresar cualquier carácter excepto un conjunto dado ˜, se hace de la manera siguiente:

> ˜ (a|b) indica cualquier caracter que no sea una a ó b.

> Opcionalidad (?)

> r? indica que la expresión r puede aparecer o no. En el caso de que aparezca solo lo hará una vez.

> Cuando queremos usar estos símbolos con su significado tenemos que usar la barra de escape, [a\-z] significaría cualquier letra que sea a, guion ó z.

> Algunos ejemplos:

> Para los números naturales, se expresa como:

> nat = [0-9]+,
> signedNat = ( + | -)? nat
> number = signedNat(‘‘.’’nat)? (E signedNat)?

> Para los identificadores, se hace como a continuación se indica:

> letter = [a-zA-Z]
> digit = [0-9]

Atrás Siguiente

##### Introducción / Contenido / Unidad I / Unidad II / Unidad III / Unidad IV / Unidad V / Unidad VI / Unidad VII / Unidad VIII / Unidad IX / Problemario / Bibliografía

##### Inicio

##### Créditos

José Sánchez Juárez, Andrés Ortigoza Campos, Fabiola Ocampo Botello