Compiladores

Share Embed Donate


Short Description

Download Compiladores...

Description

Compiladores

Tema 3 Análisis Lexicográfico Scanners

Compiladores (17/04/2011 18:2 6)

- 4.1 -

Scanner

Programa fuente (secuencia de caracteres)

Scanner  (autómata finito determinista o específico)

Secuencia de símbolos Símbolo Categoría sintáctica: número, identificador, identificador, if, suma, suma, abrir paréntesis

Atributos: valor, nombre, string.

Compiladores (17/04/2011 18:2 6)

- 4.2 -

Ejemplos de Sí mbolos

Identificador:

 ±

Forma: una letra seguida de letras o números. Ej. a, b1, c3D

 ±

Atributo nombre: string con la secuencia de caracteres que forma el identificador en mayúsculas. Ej. ³A´, ³B1´, ³C3D´

Número:

 ±

Forma: secuencia de dígitos que puede empezar con el signo menos y puede contener un punto. Ej. 10, -3, 15.4, -54.276, .10

 ±

Atributo valor: double con el valor numérico.

 ±

Precisión: entero o real.

Punto y Coma:

±

Forma: ;

Palabra clave if:

 ±

Forma: if, If, IF, iF

Fin de fichero:

 ±

Forma: carácter EOF de C.

Compiladores (17/04/2011 18:26)

- 4.3 -

Separación

en Sí mbolos

Los comentarios, saltos de línea, espacios y tabs no forman parte de la secuencia de símbolos. Al definir los símbolos se ha de considerar  como se separan.  ± Entre dos símbolos se encuentra cararcteres separadores (espacios, tabs, comentarios, etc.)  ± Siempre se intenta leer el símbolo más largo

Ejemplos: ± if ( a > 10 ) bc = 30 * - 4 ± if ( a >= 10 ) bc = 30 * - 4 ± int * * a ; ± zz /* comentario */ + dd

Compiladores (17/04/2011 18:26)

- 4.4 -

Especificación

Símbolos: identificador, abrir paréntesis, string, etc. ± Forma: Expresiones regulares para cada categoría sintáctica.

± Atributos: Algoritmo para el cálculo de cada atributo a  partir de la secuencia de caracteres del símbolo.

Separadores: espacios, comentarios, salto de línea, tab, etc.

± Forma: Expresión regular que especifica las secuencias de caracteres que separan los símbolos.

Otros: errores, final de fichero, salto de línea, etc.

Compiladores (17/04/2011 18:26)

- 4.5 -

Expresiones Regulares

es una expresión regular que representa el conjunto vacío.

Pes una expresión regular que representa el conjunto con un único elemento que es la secuencia vacía un string  s es una expresión regular que representa un conjunto que solo contiene s. Para evitar confusiones, los metacaracteres que contenga s van entre comillas (µ|¶,¶-¶,...). V es el conjunto de todos los caracteres (vocabulario).

Compiladores (17/04/2011 18:26)

- 4.6 -

Expresiones Regulares Operadores

AB Concatenación {ab| a A y b B} A|B unión {x| x

A ó x B}

A

*

repetición P`%`%%`%%%

A

+

repetición de uno o más %`%%`%%%

A

n

repetición de n veces

(A-B) resta {x| x

Compiladores (17/04/2011 18:26)

A y x B}

- 4.7 -

Ejemplos de Expresiones Regulares

dígito d=0|1|2|3|4|5|6|7|8|9 entero_sin_signo=d

+

entero=(+|-| P)d+ real=d +.d+(P|e(+|-|P) d+) letra l=a|...|z|A...|Z identificador=l(l|d)

*

string=³(V-´) *´

Compiladores (17/04/2011 18:26)

- 4.8 -

Scanner

implementado a mano

El scanner es un procedimiento que lee un símbolo del programa fuente  ± Entrada: caracteres de un istream istream *IScan; // Stream de entrada

 ± Salida: símbolo en variable global enum Categoria { SNumero,SIdentificador,SString, Sif... }; Categoria ScanCat; // Categorita sintáctica double ScanEntero; // Valor numérico double ScanReal; // Valor numérico bool ScanEsEntero; // Tipo de número string ScanString; // String del símbolo

Condiciones que cumple el scanner   ± Lee caracteres hasta conseguir leer un símbolo  ± En caso de duda lee el símbolo más largo  ± Al salir del scanner, el último carácter leído  pertenece al símbolo. Si se ha leído alguno más se devuelve a la entrada Compiladores (17/04/2011 18:26)

- 4.9 -

Scanner

en C++

oid Scanner()

v

{ int c; for (;;) { c=IScan->get(); switch (c) { // Separadores case '\r': case '\n': case '\t': case ' ': break; default: if ((c>='a' && c='A' && c
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF