0% found this document useful (0 votes)
90 views51 pages

Macro Processors: Source Code Macro Processor Expanded Code Compiler or Assembler

This document discusses macro processors and their functions. It covers: - The basic functions of macro definition, expansion, and the two-pass algorithm used by macro processors. Macro definitions are stored in a DEFTAB and macro names in a NAMTAB. - Features like concatenation of macro parameters using a special operator, generation of unique labels, and conditional expansion using macros and variables. - Design options for macro processors including recursive expansion, where one macro can invoke another during expansion. Examples are given to illustrate recursive expansion.

Uploaded by

Waqas Mahmood
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
90 views51 pages

Macro Processors: Source Code Macro Processor Expanded Code Compiler or Assembler

This document discusses macro processors and their functions. It covers: - The basic functions of macro definition, expansion, and the two-pass algorithm used by macro processors. Macro definitions are stored in a DEFTAB and macro names in a NAMTAB. - Features like concatenation of macro parameters using a special operator, generation of unique labels, and conditional expansion using macros and variables. - Design options for macro processors including recursive expansion, where one macro can invoke another during expansion. Examples are given to illustrate recursive expansion.

Uploaded by

Waqas Mahmood
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 51

Chapter 4

Macro Processors

Source
Macro Expanded Compiler or obj
Code
(with macro)
Processor Code Assembler

1
4.1 Basic Macro Processor Functions
4.1.1 Macro Definition and Expansion
 Fig. 4.1 shows an example of a SIC/XE program
using macro instructions.
 RDBUFF and WRBUFF
 MACRO and MEND
 RDBUFF is name
 Parameters of the macro instruction, each parameter
begins with the character &.
 Macro invocation statement and the arguments to be
used in expanding the macro.
 Fig. 4.2 shows the output that would be generated.

2
3
4
5
6
7
8
Source Expanded source
STRG MACRO .
STA DATA1 .
STB DATA2 .
STX DATA3
MEND
.
STRG
.
STRG .
{
STA
STB
STX
DATA1
DATA2
DATA3

. STA DATA1
.

.
{
STB
STX
DATA2
DATA3

9
4.1.2 Macro Processor Algorithm
and Data Structures
 Two-pass macro processor
 All macro definitions are processed during the first pass.
 All macro invocation statements are expanded during
the second pass.
 Two-pass macro processor would not allow the body of
one macro instruction to contain definitions of other
macros.
 Such definitions of macros by other macros Fig.
4.3

10
11
12
4.1.2 Macro Processor Algorithm
and Data Structures

 A one-pass macro processor that can alternate


between macro definition and macro expansion.
 The definition of a macro must appear in the source
program before any statements that invoke that
macro.
 Inconvenience of the programmer.
 Macro definitions are stored in DEFTAB
 Comment lines are not entered the DEFTAB.

13
4.1.2 Macro Processor Algorithm
and Data Structures

 The macro names are entered into NAMTAB, NAMTAB


contains two pointers to the beginning and the end of
the definition in DEFTAB
 The third data structure is an argument table ARGTAB,
which is used during the expansion of macro invocations.
 The arguments are stored in ARGTAB according to their
position in the argument list.

14
4.1.2 Macro Processor Algorithm
and Data Structures
 Fig. 4.4 shows positions of the contents of these
tables during the processing.
 Parameter &INDEV -> Argument ?1
 Parameter &BUFADR -> Argument ?2
 When the ?n notation is recognized in a line form
DEFTAB, a simple indexing operation supplies the
proper argument form ARGTAB.

15
16
4.1.2 Macro Processor Algorithm
and Data Structures
 The macro processor algorithm itself is presented
in Fig. 4.5.
 The procedure PROCESSING
 The procedure DEFINE
 Called when the beginning of a macro definition is recognized,
makes the appropriate entries in DEFTAB and NAMTAB.
 The procedure EXPAND
 Called to set up the argument values in ARGTAB and expand a
macro invocation statement.
 The procedure GETLINE
 Called at several points in the algorithm, gets the next line to be
processed.
 EXPANDING is set to TRUE or FALSE.
17
18
19
20
4.1.2 Macro Processor Algorithm
and Data Structures

 To solve the problem is Fig. 4.3, our DEFINE


procedure maintains a counter named LEVEL.
 MACRO directive is read, the value of LEVEL is inc. by 1.
 MEND directive is read, the value of LEVEL is dec. by 1.

21
4.2 Machine-Independent Macro Processor
Features
4.2.1 Concatenation of Macro Parameters
 Most macro processors allow parameters to be
concatenated with other character strings.
 A program contains one series of variables named by
the symbols XA1, XA2, XA3, …, another series named
by XB1, XB2, XB3, …, etc.
 The body of the macro definition might contain a
statement like
SUM Macro &ID
LDA X&ID1
LDA X&ID2
LDA X&ID3
LDA X&IDS
22
4.2.1 Concatenation of Macro Parameters

 The beginning of the macro parameter is identified by


the starting symbol &; however, the end of the
parameter is not marked.
 The problem is that the end of the parameter is not
marked. Thus X&ID1 may mean “X” + ID + “1” or “X” +
ID1.
 In which the parameter &ID is concatenated after the
character string X and before the character string 1.

23
4.2.1 Concatenation of Macro Parameters
 Most macro processors deal with this problem by
providing a special concatenation operator (Fig. 4.6).
 In SIC or SIC/XE, -> is used

24
4.2.2 Generation of Unique Labels
 As we discussed in Section 4.1, it is in general not
possible for the body of a macro instruction to
contain labels of usual kind.
 WRBUFF (line 135) is called twice.
 Fig. 4.7 illustrates one techniques for generating unique
labels within a macro expansion.
 Labels used within the macro body begin with the
special character $.
 Each symbol beginning with $ has been modified by
replacing $ with $AA.

25
4.2.2 Generation of Unique Labels

26
4.2.2 Generation of Unique Labels

27
28
4.2.3 Conditional Macro Expansion
 The use of one type of conditional macro
expansion statement is illustrated in Fig. 4.8.
 The definition of RDBUFF has two additional
parameters: &EOR and &MAXLTH.
 Macro processor directive SET
 This SET statement assigns the value 1 to &EORCK.
 The symbol &EORCK is a macro time variables, which
can be used to store working values during the macro
expansion.
 RDBUFF F3,BUF,RECL,04,2048
 RDBUFF 0E,BUFFER,LENGTH,,80
 RDBUFF F1,BUFF,RLENG,04

29
30
31
32
33
4.2.3 Conditional Macro Expansion
 A different type of conditional macro expansion
statement is illustrated in Fig. 4.9.
 There is a list (00, 03, 04) corresponding to &EOR.
 %NITEMS is a macro processor function that returns as
its value the number of members in an argument list.
 %NITEMS(&EOR) is equal to 3.
 &CTR is used to count the number of times the lines
following the WHILE statement have been generated.
 Thus on the first iteration the expression &EOR[&CTR]
on line 65 has the value 00 &EOR[1]; on the second
iteration it has the value 03, and so on.
 How to implement nesting WHILE structures?

34
35
36
4.2.4 Keyword Macro Parameters
 Positional parameters
 Parameters and arguments were associated with each
other according to their positions in the macro
prototype and the macro invocation statements.
 A certain macro instruction GENER has 10 possible
parameters.
GENER MACRO &1, &2, &type, …, &channel, &10

GENER , , DIRECT, , , , , , 3

37
4.2.4 Keyword Macro Parameters
 Keyword parameters
 Each argument value is written with a keyword that
names the corresponding parameter.
 Arguments may appear in any order.

GENER TYPE=DIRECT, CHANNEL=3


parameter=argument
 Fig. 4.10 shows a version of the RDBUFF using keyword.

38
39
40
41
4.3 Macro Processor Design Options
4.3.1 Recursive Macro Expansion

 In Fig. 4.3 we presented an example of the


definition of one macro instruction by another.
 Fig. 4.11(a) shows an example - Dealt with the
invocation of one macro by another.
 The purpose of RDCHAR Fig. 4.11(b) is to read one
character from a specified device into register A,
taking care of the necessary test-and-wait loop.

42
43
44
4.3.1 Recursive Macro Expansion
 Fig. 4.11(c), applied to the macro invocation statement
RDBUFF BUFFER, LENGTH, F1
 The procedure EXPAND would be called when the macro
was recognized.
 The arguments from the macro invocation would be
entered into ARGTAB as follows:

45
4.3.1 Recursive Macro Expansion
 The Boolean variable EXPANDING would be set to TRUE,
and expansion of the macro invocation statement would be
begin.
 The processing would proceed normally until line 50, which
contains a statement invoking RDCHAR. At that point,
PROCESSLINE would call EXPAND again.
 This time, ARGTAB would look like

46
4.3.1 Recursive Macro Expansion
 At the end of this expansion, however, a problem
would appear. When the end of the definition of
RDCHAR was recognized, EXPANDING would be
set to FALSE.
 Thus the macro processor would “forget” that it
had been in middle of expanding a macro when it
encountered the RDCHAR statement.
 Use a Stack to save ARGTAB.
 Use a counter to identify the expansion.

47
Pages 208-209, MASM

48
49
50
51

You might also like