Compiladores

Anuncio
Lectura del programa fuente
Compiladores
2. Lectura del programa fuente
M. en C. Cynthia A. Rodrı́guez Villalobos
2011-O
1/4
Lectura del programa fuente
Lectura del programa fuente
I
Las rutinas estándar para lectura del lenguaje de
implementación:
I
I
I
I
Antes, los compiladores utilizaban tcnicas de buffering, para
acelerar la lectura del archivo utilizando poca memoria.
Ahora, se recomienda leer el archivo completo (de ser posible)
con una llamada al sistema.
I
I
I
I
I
2/4
suelen ser lentas
pueden alterar caracteres
Es rápido
Las máquinas tienen “mucha” memoria
Se puede conocer el tamaño de un archivo: se asigna la
memoria necesaria antes de leer el archivo
Es más fácil manejar tokens de longitud variable
Se pueden generar mensajes de error más precisos
Lectura del programa fuente
Lectura del programa fuente
UNIX
En UNIX/C se puede utilizar:
open
close
#i n c l u d e <f c n t l . h>
#i n c l u d e <u n i s t d . h>
i n t open ( c o n s t c h a r ∗path , i n t oflag ) ;
i n t close ( i n t fd ) ;
read
#i n c l u d e <s y s / t y p e s . h>
#i n c l u d e <u n i s t d . h>
ssize_t read ( i n t fd , v o i d ∗buffer , size_t nBytes ) ;
3/4
Lectura del programa fuente
Lectura del programa fuente
Ejemplo: lectura.c
#i n c l u d e <s y s / t y p e s . h>
#i n c l u d e <f c n t l . h>
#i n c l u d e <u n i s t d . h>
#i n c l u d e <s t d l i b . h>
#i n c l u d e <s t r i n g . h>
#i n c l u d e <s t d i o . h>
#d e f i n e BUFFER SIZE 16384
i n t main ( i n t argc , c h a r ∗∗argv ){
i n t fd , rd_count , contador =0;
c h a r buffer [ BUFFER_SIZE ] ;
i f ( argc !=2) exit ( 1 ) ;
fd=open ( argv [ 1 ] , O_RDONLY ) ;
i f ( fd <0) exit ( 2 ) ;
printf ( ” L e y e n d o a r c h i v o %s \n” , argv [ 1 ] ) ;
w h i l e (1){
rd_count=read ( fd , buffer , BUFFER_SIZE ) ;
i f ( rd_count <=0) b r e a k ;
contador++;
}printf ( ” Se l e y e r o n %d b l o q u e s \n” , contador ) ;
i f ( rd_count==0) exit ( 0 ) ;
e l s e exit ( 3 ) ;
}
4/4
Salida:
Leyendo archivo lectura . c
Se leyeron 1 bloques
Descargar