Compiladores
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.
Pes 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