Procesadores de Macros - Universidad Veracruzana · Los costos relacionados con la producción de...
Transcript of Procesadores de Macros - Universidad Veracruzana · Los costos relacionados con la producción de...
Procesadores de 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 las instrucciones a
macros es en ensamblador, hay otras
posibilidades.
Figura 4.11
30 CLEAR X LIMPIA EL CONTADOR DE CICLO
35 CLEAR A
50
45
CLEAR
+LDTS
# 4096
ASIGNA LA LONGITUD MAXIMA DEL
REGISTRO
50 $L00P RDCHAR &INDEV LEE EL CARACTER EN EL REGISTRO A
65 C0MPR A,S EXAMINA SI HAY FIN DE REGISTRO
70 JEQ $EX IT SALE DEL CICLO SI ES FIN DE REGISTRO
75 STCH &BUFADR,X ALMACENA EL CARACTER EN EL BUFFER
80 TIXR T REPITE EL CICLO A MENOS QUE SE HAYA
85 JLT $L00P ALCANZADO LA LONGITUD MAXIMA
90 $EXIT STX &RECLTH GUARDA LA LONGITUD DEL REGISTRO
95 MEND
10 RDBUFF MACRO &BUFADR,&RECLTH,&INDEV1520 MACRO QUE LEE UN REGISTRO EN EL BUFFER25
5 RDCHAR MACRO &IN
10
15 . MACRO QUE LEE UN CARACTER EN EL REGISTRO A
20
25 TD =X'&IN' PRUEBA EL DISPOSITIVO DE ENTRADA
30 JEQ*-3 REPITE EL CICLO HASTA QUE ESTE LISTO
35 RD =X'&IN' LEE EL CARACTER
40 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 es leer 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 puede manejar 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
• PROCESA-LINEA llamaría de nuevo a EXPANDE, y
esta vez, TABARG sería:
TABARG:
Parámetro Valor
1 FI
2 (sin usar)
50 $L00P RDCHAR &INDEV LEE EL CARACTER EN EL REGISTRO A
• 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.
• Estos problemas 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 no necesita 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 sonalgo superiores
• Hay relativamente pocos procesadores demacros de aplicación general.▫ El gran número de detalles
▫ Por ejemplo, un procesador de macros en generaldebe 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
▫ definición e invocación de macros.
(En la mayoría de los procesadores de macros
de aplicación especial, las invocaciones a
macros tienen una forma muy parecida a las
proposiciones del lenguaje fuente de
programación)
▫ es difícil de conseguir con un procesador de
macros de aplicación general
Procesamiento de macros en
traductores de lenguaje• Preprocesadores de macros.- procesan
definiciones de macros y expanden
invocaciones a macros
▫ código fuente versión expandida
ensamblador/compilador
• alternativa: la combinación de las funciones de
procesamiento de macros con el traductor de
lenguaje
Procesamiento de macros en
traductores de lenguaje• El método más simple es con un procesador de
macros línea a línea
• Ventajas:
▫ Evita hacer un paso adicional sobre el programa
fuente
▫ Puede ser más eficiente
• Algunas estructuras de datos requeridas por el
procesador de macros y el traductor de
lenguaje se pueden combinar:
▫ búsqueda en las líneas de entrada, búsqueda en
tablas y conversión de valores numéricos
▫ facilita la emisión de mensajes de diagnóstico
• las funciones de procesamiento de macros y
traducción de programas son relativamente
independientes
• es posible tener una cooperación más estrecha
• Un procesador de macros integrado tiene la
posibilidad de utilizar cualquier información
con respecto al programa fuente que extraiga
el traductor de lenguaje
• El procesador de macros tan sólo puede usar los
resultados
(sin implicarse en aspectos como operadores de
varios caracteres, líneas de continuación y
reglas de formación de componentes léxicos)
• un procesador de macros integrado puede
manejar macroinstrucciones dependientes del
contexto
• Procesadores de macros integrados y línea a
línea tienen desventajas:
▫ Deben ser especialmente diseñados y escritos
para trabajar con una implantación determinada
de un ensamblador o compilador (no sólo con un
lenguaje de programación determinado)
• Sería más grande y más costoso
Ejemplos de procesadores de
macros
1 MACRO
2 &NAME ADD &0P1,&0P2,&SUM
3 LCLC &TYPE
4 AIF (T'&OPl NE T'&0P2) .MIXTYP
5 AIF (T'&OPl EQ 'F') .INTGR
6 AIF (T'&OPl EQ 'F') .FLOAT
7 AGO .TYPERR
8 .FLOAT ANOP
9 &TYPE SETC 'E'-
10 . INTGR ANOP
11 &NAME L&TYPE 2 ,&0P1
12 A&TYPE 2,&0P2
13 ST&TYPE 2,&SUM
14 MEXIT
15 .MIXTYP MNOTE 'TIPOS DE OPERANDOS
MEZCLADOS'
16 MEXIT
17 .TYPERR MNOTE 'TIPO DE OPERANDO ILEGAL'
18 MEND
(a)
LAB ADO Ì,J,K
LAB L 2,IA 2,JST 2,K
(b)ADO X,Y,Z
LE 2,X AE 2,YSTE 2,Z
(C)ADO I,Y,Z*** TIPOS DE OPERANDOS MEZCLADOS
(d)
FIGURA 4.12 Ejemplos de definición y expansión de
macros en el Sistema/370.
1 MACRO ABSDIF OP1, OP2, SIZE, NUM, ?L1
2 SUB’SIZE’3 OP1, OP2, R’NUM
3 TSTL R’NUM
4 BGEQ L1
5 MNEGL R’NUM, R’NUM
6 L1: .ENDM ABSDIF
(a)
ABSDIF X,Y,L,O
SUBL3 X,Y,RO
TSTL RO
BGEQ 30000$
MINEGL RO,RO
30000$:
(b)
ABSDIF I,J,W,2
SUBW3 I,J,R2
TSTL R2
BGEQ 30001$ MNEGL R2,R2
30001$:
(c)
FIGURA 4.13 Ejemplos de
definición y expansión
de macros en VAX
1. macro 'for' id 'from' f ('by' b I /) 'to' t 'do' body:noneg 'od'
2. begin
3. <%id = %f
4. %snum IF (%id .GT. %t) GO TO %(snum+l)
5. %body
6. %id = %id + >;
7. if b * " then <(%b)> else <1> fi;
8. <%/G0 TO %snum
9. %(snum+l) CONTINUE %/>;
10. snum := snum + 2;
11. end
(a)
for I from 0 to n-1 do
S := S + A(I)
Od
(b)
I = 0
IF (I .GT. N-1) G0 T0 9001 S = S + A(I)
1 = 1 + 1
G0 T0 9000
CONTINUE
(c)
FIGURA 4.14 Ejemplos
de definición y expansión
de macros en PM
• La macro definida en la figura 4.14(a) está diseñadapara su uso en FORTRAN
• la invocación a macros es una proposición for parecidaa la de ALGOL;
• el texto de salida está en formato FORTRAN.• La línea 1 proporciona el patrón general para la
proposición de invocación a macros:▫ for, seguida de un parámetro id, seguido de la palabra
clave from …• La expresión entre paréntesis de esta línea indica una
alternativa, cuya primera posibilidad es la cláusula by yla segunda opción está vacía (indicada por /).
• El patrón indica que una proposición de invocación amacros puede contener opcionalmente una cláusula by.
• La especificación noneg unida al cuerpo del parámetroespecifica que los espacios y los saltos de línea seconsideran significativos.
• El texto que se escribirá en la salida expandida
está encerrado entre < y > .
• Las líneas 3 a 6 contienen ese tipo de cadenas
de salida.
• El carácter % se utiliza como bandera para
indicar parámetros y variables en el momento
del procesamiento de macros.
• La línea 3 especifica que el valor del parámetro
id se escribirá a la salida, seguido de un signo
igual y del valor del parámetro /.
• En la figura 4.14(b) se muestra una proposición
fuente que corresponde al patrón definido.
• En la figura 4.14(c) se muestra la salida
generada por la expansión de esta invocación a
macros.
Ejercicios en clase
PARA EL LUNES 18/OCT/20101. Buscar procesadores actuales de propósito
general.
2. Selecciónense dos lenguajes de programación dealto nivel diferentes con los cuales se estéfamiliarizado. ¿Qué diferencias entre esoslenguajes pueden ser significativas para unprocesador de macros que se vaya a utilizar conel lenguaje?
3. Lístense las funciones de utilidad y rutinas quepodrían compartir un ensamblador y unprocesador de macros integrado