Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los...

29
Procesadores de Macros Parte 2 MIS. Lizbeth Alejandra Hernández González Programación de Sistemas

Transcript of Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los...

Page 1: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

Procesadores de Macros

Parte 2

MIS. Lizbeth Alejandra Hernández González

Programación de Sistemas

Page 2: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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.

Page 3: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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

Page 4: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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.

Page 5: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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

Page 6: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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

Page 7: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

• 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

Page 8: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

• 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

Page 9: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

• el procesador de macros "olvidará" que estaba ala mitad de la expansión de una macro alencontrar la proposición RDCHAR

• los argumentos de la invocación a macrosoriginal (RDBUFF) se perdieron (los valores deTABARG se superpusieron)

• podría incorporarse la misma lógica en unaestructura de ciclo, en lugar de llamadasrecursivas.

Page 10: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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

Page 11: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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.

Page 12: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

• 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

Page 13: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

▫ 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

Page 14: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

▫ 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

Page 15: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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

Page 16: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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

Page 17: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

• 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

Page 18: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

• 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

Page 19: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

• 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

Page 20: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

• Las decisiones sobre el tipo de procesador de

macros que se va a utilizar deben tener en

cuenta aspectos como la frecuencia y la

complejidad del procesamiento de macros que

se espera, y otras características del ambi.ente

de computación

Page 21: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

Ejemplos de procesadores de

macros

Page 22: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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)

Page 23: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

LAB ADD I,J,K

LAB L 2,IA 2,JST 2,K

(b)ADD X,Y,Z

LE 2,X AE 2,YSTE 2,Z

(C)ADD I,Y,Z*** TIPOS DE OPERANDOS MEZCLADOS

(d)

FIGURA 4.12 Ejemplos de definición y expansión de

macros en el Sistema/370.

Page 24: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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

Page 25: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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

Page 26: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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

Page 27: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

• 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 /.

Page 28: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

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

Page 29: Procesadores de Macros - Universidad Veracruzana · Un problema más general es el de los componentes léxicos o tokens ... reglas de formación de componentes léxicos) ... •La

Ejercicios en clase

PARA EL LUNES 1. 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