mis estadisticas

2

jueves, 21 de abril de 2011

1.8.- EXPANSIÓN CONDICIONAL.

EXPANSIÓN CONDICIONAL

En esta unidad se estudian el diseño y la construcción de los procesadores de macros. Una macroinstrucción (abreviada cómo macro) no es más que una conveniencia notacional para el programador. Una macro representa un grupo de proposiciones utilizadas comúnmente en el lenguaje de programación fuente. El procesador de macros reemplaza cada macroinstrucción con el grupo de correspondiente de proposiciones del lenguaje fuente, lo que se denomina expansión de las macros. De esta forma, las macroinstrucciones permiten al programador escribir una versión abreviada de un programa, dejando que el procesador de macros maneja los detalles mecánicos.
 En esencia, las funciones de un procesador de macros implican la sustitución de un grupo de caracteres o líneas por otras. Con excepción de unos cuantos casos especializados, el procesador de macros no realiza ningún análisis de texto que maneja. El diseño y posibilidades de un procesador de macros pueden estar influidos por la forma de las proposiciones del lenguaje de programación. Sin embargo, el significado de esas proposiciones y su traducción al lenguaje de máquina carecen de interés durante la expansión de macros. El significado de esto es que el diseño de un procesador de macros no esta directamente relacionado con la estructura del computador en el que se va a ejecutar.
3.1 Funciones básicas del procesador de macros.
   3.1.1 Definición y expansión de macros. (estructura de datos)
 En la figura 3.1 se ilustra un ejemplo de un programa SIC/XE que usa instrucciones a macros. Este programa tiene las mismas funciones y lógica que el programa de ejemplo de la figura 2.5; sin embargo, se ha cambiado el esquema de numeración empleado para las proposiciones fuente.
5 COPY START 0 Copia el archivo de la entrada a la salida.
10 RDBUFF MACRO &INDEV, &BUFADR, &RECLTH
15 .
20 . MACRO QUE LEE UN REGISTRO EN EL BUFFER.
25 .
30  CLEAR X Limpia el contador del ciclo.
35  CLEAR  A
40  CLEAR S
45  +LDT #4096 Asigna la longitud max. del regtro
50  TD =X’&INDEV’ Prueba el dispositivo de entrada.
55  JEQ *-3 Repite el ciclo hasta que este listo.
60  RD =X’&INDEV’ Lee el carácter en el registro A.
65  COMPR A,S Examina si hay fin de registro.
70  JEQ *+11 Sale del ciclo si es fin de registro.
75  STCH &BUFADR,X Almacena el carácter en el buffer.
80  TIXR T Repite el ciclo a menos que sé
85  JLT *-19  Haya alcanzado la longitud max.
90  STX &RECLTH Guarda la longitud del registro.
95  MEND
100 WRBUFF MACRO &OUTDEV, &BUFADR, &RECLTH
105 .
110 . MACRO QUE ESCRIBE EL REGISTRO EN EL BUFFER.
115 .
120  CLEAR X Limpia el contador del ciclo.
125  LDT &RECLTH
130  LDCH &BUFADR,X Toma el carácter del buffer.
135  TD =X’&OUTDEV’ Prueba el dispositivo de salida.
140  JEQ *-3 Repite el ciclo hasta que este listo.
145  WD =X’&OUTDEV’ Escribe el carácter.
150  TIXR T Repite el ciclo hasta que se hayan
155  JLT *-14   Escrito todos los caracteres.
160  MEND
165 .
170 . PROGRAMA PRINCIPAL
175 .
180 FIRST STL RETADR Guarda la dirección de retorno.
190 CLOOP RDBUFF F1,BUFFER,LENGTH Lee el registro de entrada
195  LDA LENGTH
200  COMP #0 Verifica si es fin de archivo.
205  JEQ ENDFIL Sale si encontró fin de archivo.
210  WRBUFF 05,BUFFER,LENGTH Escribe el registro en la salida.
215  J CLOOP Ciclo.
220 ENDFIL WRBUFF 05,EOF,THREE Inserta marca de fin de archivo.
225  J @RETADR
230 EOF BYTE C’EOF’
235 THREE WORD 3
240 RETADR RESW 1
245 LENGTH RESW 1 Longitud del registro.
250 BUFFER RESB 4096 Area de buffer de 4096 bytes.
255  END FIRST

No hay comentarios:

Publicar un comentario