You are on page 1of 35

Macro Processors

Chapter 4

System Software
An introduction to systems programming

Leland L. Beck

Introduction

Concept
A macro instruction is a notational convenience for the programmer It allows the programmer to write shorthand version of a program (module programming) The macro processor replaces each macro invocation with the corresponding sequence of statements (expanding)

Macro Processor

Recognize macro definitions Save the macro definition Recognize macro calls Expand macro calls

Source Code
(with macro)

Macro Processor

Expanded Code

Compiler or Assembler

obj

Macro Definition

copy code parameter substitution conditional macro expansion macro instruction defining macros

Copy code -- Example


Source STRG MACRO STA DATA1 STB DATA2 STX DATA3 MEND . STRG . STRG . . Expanded source . . . STA DATA1 STB DATA2 STX DATA3 . STA DATA1 STB DATA2 STX DATA3 .

{ {

Macro vs. Subroutine

Macro
the statement of expansion are generated each time the macro are invoked

Subroutine
the statement in a subroutine appears only once

Parameter Substitution -- Example


Source STRG MACRO &a1, &a2, &a3 STA &a1 STB &a2 STX &a3 MEND . STRG DATA1, DATA2, DATA3 . STRG DATA4, DATA5, DATA6 . . Expanded souce . . . STA STB STX . STA STB STX .

{ {

DATA1 DATA2 DATA3 DATA4 DATA5 DATA6

Parameter Substitution

Dummy arguments
Positional argument
STRG DATA1, DATA2, DATA3 GENER ,,DIRECT,,,,,,3

Keyword argument
STRG &a3=DATA1, &a2=DATA2, &a1=DATA3 GENER TYPE=DIRECT, CHANNEL=3

Example: Fig. 4.1, Fig. 4.2


Labels are avoided in macro definition

One-Pass Macro Processor


Prerequisite
every macro must be defined before it is called

Sub-procedures
macro definition: DEFINE macro invocation: EXPAND
NAMTAB MACRO

DEFINE EXPAND

DEFTAB

PROCESSLINE
CALL ARGTAB

Data Structures -- Global Variables


DEFTAB NAMTAB ARGTAB

EXPANDING

11

Nested Macros Definition


Macro definition within macros


process macro definition during expansion time

Example 4.3

12

Figure 4.3 (b)

13

One-Pass Macro Processor That Allows

Nested Macro Definition

Sub-procedures
macro definition: DEFINE macro invocation: EXPAND

EXPAND may invoke DEFINE when encounter macro definition


NAMTAB DEFTAB ARGTAB Expanding
MACRO

DEFINE EXPAND

PROCESSLINE
CALL

MACRO Definition

14

1-Pass Macro Processor


MACRO PROCESSOR
DEFINE

GETLINE
EXPANDING=FALSE

PROCESSLINE
GETLINE PROCESSLINE
EXPAND

EXPANDING=TRUE

GETLINE

GETLINE PROCESSLINE

EXPANDING TRUE

FALSE

READ FROM DEFTAB

READ FROM INPUT

17

Comparison of Macro Processors Design

Single pass
every macro must be defined before it is called one-pass processor can alternate between macro definition and macro expansion nested macro definitions may be allowed but nested calls are not

Two pass algorithm


Pass1: Recognize macro definitions Pass2: Recognize macro calls nested macro definitions are not allowed

18

Concatenation of Macro Parameters


Pre-concatenation
LDA LDA X&ID1 X&ID1

Post-concatenation

Example: Figure 4.6

19

Generation of Unique Labels

Example
JEQ *-3 inconvenient, error-prone, difficult to read

Example Figure 4.7


$LOOP TD TD TD =X&INDEV =XF1 =XF1

1st call:
$AALOOP

2nd call:
$ABLOOP

20

RDBUFF

F1, BUFFER, LENGTH

Conditional Macro Expansion

Macro-time conditional statements


Example: Figure 4.8 IF-ELSE-ENDIF

Macro-time variables
any symbol that begins with the character & and that is not a macro parameter macro-time variables are initialized to 0 macro-time variables can be changed with their values using SET
&EORCK SET 1

23

RDBUFF

F3, BUF, RECL, 04, 2048

RDBUFF

0E, BUFFER, LENGTH, , 80

RDBUFF

F1, BUFF, RLENG, 04

Conditional Macro Expansion (Cont.)

Macro-time looping statement


Example: Figure 4.9 WHILE-ENDW

Macro processor function


%NITEMS: THE NUMBER OF MEMBERS IN AN ARGUMENT LIST

27

Nested Macro Invocations


Macro invocations within macros


process macro invocation during expansion time

Recursive macro expansion


Example: Figure 4.11 Problems:
ARGTAB EXPANDING

Solution
Recursive call While loop with stack

28

ARGTAB
DEFTAB NAMTAB
MACRO Definition

DEFINE
GETLINE

PROCESSLINE

Macro Invocation

EXPAND

ARGTAB

29

1-Pass Macro Processor


MACRO PROCESSOR
DEFINE

GETLINE
EXPANDING=FALSE

PROCESSLINE
GETLINE PROCESSLINE
EXPAND

EXPANDING=TRUE

GETLINE

GETLINE PROCESSLINE

EXPANDING TRUE

FALSE

READ FROM DEFTAB

READ FROM INPUT

30

Allowing Nested Macro Invocation


MACRO PROCESSOR
DEFINE(f)

GETLINE(f)

PROCESSLINE(f)
GETLINE(0) PROCESSLINE(0)
EXPAND

GETLINE(f)

GETLINE(1) PROCESSLINE(1)

f TRUE

FALSE

READ FROM DEFTAB

READ FROM INPUT

31

Macro-Assembler

Advantage
reduce 1 pass share same data structure

Disadvantage
more complex

32

Pass 1

READ
Search (Pseudo-Op Table) Pass 2

Type?

Search NAMTAB (Macro Name Table)

MACRO Define

Process pseudo-ops

Search (Machine Op Table)

R
MACRO Expand

Process machine instruction

General Purpose Macro Processor

ELENA
Software: Practice and Experience, Vol. 14, pp. 519-531, Jun. 1984

Macro definition
header:
a sequence of keywords and parameter markers (%) at least one of the first two tokens in a macro header must be a keyword, not a parameter marker

body:
the character & identifies a local label macro time instruction (.SET, .IF .JUMP, .E) macro time variables or labels (.)
34

ELENA (cont.)

Macro invocation
There is no single token that constitutes the macro name Constructing an index of all macro headers according to the keywords in the first two tokens of the header Example
DEFINITION:

ADD %1 TO %2 ADD %1 TO THE FIRST ELEMENT OF %2

INVOCATION:

DISPLAY %1 %1 TABLE

DISPLAY TABLE

35