| Commit | Line | Data |
|---|---|---|
| 984263bc MD |
1 | m4 - macro processor |
| 2 | ||
| 4afad3d8 PA |
3 | PD m4 is based on the macro tool distributed with the software |
| 4 | tools (VOS) package, and described in the "SOFTWARE TOOLS" and | |
| 5 | "SOFTWARE TOOLS IN PASCAL" books. It has been expanded to include | |
| 984263bc MD |
6 | most of the command set of SysV m4, the standard UN*X macro processor. |
| 7 | ||
| 8 | Since both PD m4 and UN*X m4 are based on SOFTWARE TOOLS macro, | |
| 9 | there may be certain implementation similarities between | |
| 10 | the two. The PD m4 was produced without ANY references to m4 | |
| 11 | sources. | |
| 12 | ||
| 13 | written by: Ozan S. Yigit | |
| 14 | ||
| 15 | References: | |
| 16 | ||
| 17 | Software Tools distribution: macro | |
| 18 | ||
| 19 | Kernighan, Brian W. and P. J. Plauger, SOFTWARE | |
| 20 | TOOLS IN PASCAL, Addison-Wesley, Mass. 1981 | |
| 21 | ||
| 22 | Kernighan, Brian W. and P. J. Plauger, SOFTWARE | |
| 23 | TOOLS, Addison-Wesley, Mass. 1976 | |
| 24 | ||
| 25 | Kernighan, Brian W. and Dennis M. Ritchie, | |
| 26 | THE M4 MACRO PROCESSOR, Unix Programmer's Manual, | |
| 27 | Seventh Edition, Vol. 2, Bell Telephone Labs, 1979 | |
| 28 | ||
| 29 | System V man page for M4 | |
| 30 | ||
| 31 | ||
| 32 | Implementation Notes: | |
| 33 | ||
| 4afad3d8 PA |
34 | [1] PD m4 uses a different (and simpler) stack mechanism than the one |
| 35 | described in Software Tools and Software Tools in Pascal books. | |
| 36 | The triple stack thing is replaced with a single stack containing | |
| 37 | the call frames and the arguments. Each frame is back-linked to a | |
| 38 | previous stack frame, which enables us to rewind the stack after | |
| 39 | each nested call is completed. Each argument is a character pointer | |
| 984263bc MD |
40 | to the beginning of the argument string within the string space. |
| 41 | The only exceptions to this are (*) arg 0 and arg 1, which are | |
| 42 | the macro definition and macro name strings, stored dynamically | |
| 43 | for the hash table. | |
| 44 | ||
| 45 | . . | |
| 46 | | . | <-- sp | . | | |
| 47 | +-------+ +-----+ | |
| 48 | | arg 3 ------------------------------->| str | | |
| 49 | +-------+ | . | | |
| 50 | | arg 2 --------------+ . | |
| 51 | +-------+ | | |
| 52 | * | | | | |
| 53 | +-------+ | +-----+ | |
| 54 | | plev | <-- fp +---------------->| str | | |
| 55 | +-------+ | . | | |
| 56 | | type | . | |
| 57 | +-------+ | |
| 58 | | prcf -----------+ plev: paren level | |
| 59 | +-------+ | type: call type | |
| 60 | | . | | prcf: prev. call frame | |
| 61 | . | | |
| 62 | +-------+ | | |
| 63 | | <----------+ | |
| 64 | +-------+ |