Presentation is loading. Please wait.

Presentation is loading. Please wait.

An introduction to systems programming

Similar presentations


Presentation on theme: "An introduction to systems programming"— Presentation transcript:

1 An introduction to systems programming
Macro Processors Chapter 4 System Software An introduction to systems programming Leland L. Beck

2 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)

3 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

4 Macro Definition copy code parameter substitution
conditional macro expansion macro instruction defining macros

5 { { Copy code -- Example Source STRG MACRO STA DATA1 STB DATA2
STX DATA3 MEND . STRG Expanded source . STA DATA1 STB DATA2 STX DATA3 { {

6 Macro vs. Subroutine Macro Subroutine
the statement of expansion are generated each time the macro are invoked Subroutine the statement in a subroutine appears only once

7 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 DATA1 STB DATA2 STX DATA3 STA DATA4 STB DATA5 STX DATA6 { {

8 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

9 Macro processor algorithm and data structures
Macro definition within macros process macro definition during expansion time Example 4.3(nested macro definition)

10 One-Pass Macro Processor Data Structures -- Global Variables
DEFTAB NAMTAB ARGTAB EXPANDING

11 One-Pass Macro Processor
Prerequisite every macro must be defined before it is called Sub-procedures macro definition: DEFINE macro invocation: EXPAND NAMTAB DEFINE EXPAND MACRO CALL DEFTAB PROCESSLINE ARGTAB

12

13

14

15 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 DEFTAB NAMTAB ARGTAB Expanding DEFINE EXPAND MACRO CALL PROCESSLINE MACRO Definition

16 1-Pass Macro Processor

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 Machine Independent Macro Processor Features
Concatenation of Macro Parameters Generation of Unique Labels Conditional Macro Expansion Keyword Macro parameters

19 Concatenation of Macro Parameters
Pre-concatenation LDA X&ID1 Post-concatenation LDA X&ID1 Example: Figure 4.6

20 Generation of Unique Labels
Example JEQ *-3 inconvenient, error-prone, difficult to read Example Figure 4.7 $LOOP TD =X’&INDEV’ 1st call: $AALOOP TD =X’F1’ 2nd call: $ABLOOP TD =X’F1’

21

22 RDBUFF F1, BUFFER, LENGTH

23 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

24

25 RDBUFF F3, BUF, RECL, 04, 2048 RDBUFF 0E, BUFFER, LENGTH, , 80

26 RDBUFF F1, BUFF, RLENG, 04

27 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

28 Parameter Substitution
Dummy arguments Positional argument STRG DATA1, DATA2, DATA3 GENER ,,DIRECT,,,,,,3 Keyword argument fig 4.10 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

29 Macro Processor Design Options
Recursive Macro Expansion General Purpose Macro Processors Macro Processing within Language Translators

30 Recursive Macro Expansion 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

31 ARGTAB DEFINE EXPAND PROCESSLINE DEFTAB NAMTAB MACRO Definition
GETLINE PROCESSLINE Macro Invocation EXPAND ARGTAB

32 1-Pass Macro Processor

33 Allowing Nested Macro Invocation

34 Implementation Examples
Fig 4.12 Fig 4.13 MASM Macro Processor ANSI C Language

35 General Purpose Macro Processor
ELENA Software: Practice and Experience, Vol. 14, pp , 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 (.)

36 ANSI C Macro Language

37 ANSI C Macro Language Definitions and invocations of macros are handled by a preprocessor, which is generally not integrated with the rest of the compiler. Examples: #define NULL 0 #define EOF (-1) #define EQ == syntactic modification #define ABSDIFF (X,Y) ( (X)>(Y) ? (X)-(Y) : (Y)-(X) )

38 ANSI C Macro Language Parameter substitutions are not performed within quoted strings: #define DISPLAY(EXPR) printf(“EXPR= %d\n”, EXPR) Macro expansion example DISPLAY(I*J+1)  printf(“EXPR= %d\n”, I*J+1) A special “stringizing” operator, #, can be used to perform argument substitution in quoted strings: #define DISPLAY(EXPR) printf(#EXPR “= %d\n”, EXPR) DISPLAY(I*J+1)  printf(“I*J+1” “= %d\n”, I*J+1)

39 ANSI C Macro Language Recursive macro definitions or invocations scan
After a macro is expanded, the macro processor rescans the text that has been generated, looking for more macro definitions or invocations. Macro cannot invoke or define itself recursively. DISPLAY(ABSDIFF(3,8)) printf(“ABSDIFF(3,8)” “= %d\n”, ABSDIFF(3,8)) printf(“ABSDIFF(3,8)” “= %d\n”, ( (3)>(8) ? (3)-(8) : (8)-(3) )) scan rescan

40 ANSI C Macro Language Conditional compilation statements Example 1:
#ifndef BUFFER_SIZE #define BUFFER_SIZE 1024 #endif Example 2: #define DEBUG 1 : #if DEBUG == 1 printf(…) /* debugging outout */

41 ANSI C Macro Language Miscellaneous functions of the preprocessor of ANSI C Trigraph sequences are replaced by their single-character equipments, e.g., ??<  { Any source line that ends with a backlash, \, and a newline is spliced together with the following line. Any source files included in response to an #include directive are processed. Escape sequences are converted e.g., \n, \0 Adjacent string literals are concatenated, e.g., “hello,” “world”  “hello, world”.

42 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 TABLE DISPLAY %1 %1 TABLE


Download ppt "An introduction to systems programming"

Similar presentations


Ads by Google