macros
Parte 2
MIS. Lizbeth Alejandra Hernández González
Programación de Sistemas
Opciones de diseño para el procesador de
macros
• El algoritmo de la figura 4.5 no funciona bien si
aparece una proposición de invocación a
macros en el cuerpo de una instrucción a
macros.
• A menudo es deseable admitir esta utilización
de las macros.
• Aunque el uso más común de lasinstrucciones a
macros es en ensamblador, hay otras
posibilidades.
Figura 4.11
10
15
20
25
RDBUFF MACRO &BUFADR,&RECLTH,&INDEV
MACRO QUE LEE UN REGISTRO EN EL BUFFER
30
CLEAR
X
35
CLEAR
A
50
45
CLEAR
+LDT
50
$L00P
RDCHAR
S
# 4096
LEE EL CARACTER EN EL REGISTRO A
A,S
EXAMINA SI HAY FIN DE REGISTRO
$EX IT
SALE DEL CICLO SI ES FIN DEREGISTRO
&BUFADR,X
ALMACENA EL CARACTER EN EL BUFFER
T
REPITE EL CICLO A MENOS QUE SE HAYA
C0MPR
70
JEQ
75
STCH
80
TIXR
85
JLT
$L00P
STX
&RECLTH
95
$EXIT
MEND
ASIGNA LA LONGITUD MAXIMA DEL
REGISTRO
&INDEV
65
90
LIMPIA EL CONTADOR DE CICLO
ALCANZADO LA LONGITUD MAXIMA
GUARDA LA LONGITUD DEL REGISTRO
5
10
15
20
2530
35
40
RDCHAR MACRO &IN
. MACRO QUE LEE UN CARACTER EN EL REGISTRO A
TD =X'&IN' PRUEBA EL DISPOSITIVO DE ENTRADA
JEQ *-3
REPITE EL CICLO HASTA QUE ESTE LISTO
RD =X'&IN' LEE EL CARACTER
MEND
(b)
RDBUFF BUFFER,LENGTH,F1
(c)
FIGURA 4.11 Ejemplo de invocaciones a macros anidadas.
• Suponemos que ya existe una macroinstrucción
relacionada (RDCHAR).
• El objetivo de RDCHAR esleer un carácter de
un dispositivo especificado en el registro A,
cuidando el ciclo de prueba y espera necesario.
• RDCHAR podría escribirse en un momento
distinto o por otro programador.
problemas ocasionados por esas
proposiciones de invocación a macros
• Expansión de macros recursiva
▫ la invocación a una macro por otra
• el diseño del procesador de macros analizado
no puedemanejar tales invocaciones de macros
• ¿por qué?
• Siguiendo el código 4.5 para el programa 4.11
tendríamos para la primera llamada a EXPANDE:
TABARG:
Parámetro
Valor
1
BUFFER
2
LENGTH
3
F1
4
(sin usar)
• EXPANSION=TRUE
50
$L00P
RDCHAR
&INDEV
LEE EL CARACTER EN EL REGISTRO A
• PROCESA-LINEA llamaría de nuevo a EXPANDE, y
esta vez, TABARG sería:
TABARG:
Parámetro1
2
Valor
FI
(sin usar)
• el procesador de macros "olvidará" que estaba a
la mitad de la expansión de una macro al
encontrar la proposición RDCHAR
• los argumentos de la invocación a macros
original (RDBUFF) se perdieron (los valores de
TABARG se superpusieron)
• podría incorporarse la misma lógica en una
estructura de ciclo, en lugar de llamadas
recursivas.
• Estosproblemas no son difíciles de resolver si
el procesador de macros está escrito en un
lenguaje de programación (como Pascal o C)
que permita hacer llamadas recursivas.
Procesadores de macros de aplicación general
• Esos procesadores de macros a menudo se
combinan, o se relacionan estrechamente, con
el ensamblador.
• Ventajas aplicación general para el procesador
de macros:
▫ El programador nonecesita aprender un
dispositivo de macros diferente para cada
compilador o lenguaje
▫ Se ahorra mucho tiempo y dinero de prácticas.
• Pero…
▫ Los costos relacionados con la producción de un
procesador de macros de aplicación general son
algo superiores
• Hay relativamente pocos procesadores de
macros de aplicación general.
▫ El gran número de detalles
▫ Por ejemplo, un procesadorde macros en general
debe ignorar los comentarios
▫ dispositivos de agrupación de términos, expresiones o
proposiciones:
()
[]
Begin end
▫ Un problema más general es el de los componentes
léxicos o tokens (identificadores, constantes,
operadores y palabras clave)
:= asignación en Pascal
= asignación en C
▫ Definir si espacios en blanco son significativos o no
▫...
Regístrate para leer el documento completo.