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
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