The PretzelBook - Semantic Scholar

Jun 11, 1998 - The special commands that have appeared above, e.g. the indent or force ...... 6An example noweb prettyprinter that emits HTML code can be ...
352KB Sizes 5 Downloads 435 Views
The PretzelBook second edition

Felix G¨artner June 11, 1998

2

Contents 1 Introduction 1.1 Do Prettyprinting the Pretzel Way 1.2 History . . . . . . . . . . . . . . . 1.3 Acknowledgements . . . . . . . . . 1.4 Changes to second Edition . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

5 5 6 6 6

2 Using Pretzel 2.1 Getting Started . . . . . . . . . . . . . . . . . . 2.1.1 A first Example . . . . . . . . . . . . . . 2.1.2 Running Pretzel . . . . . . . . . . . . . 2.1.3 Using Pretzel Output . . . . . . . . . . 2.2 Carrying On . . . . . . . . . . . . . . . . . . . 2.2.1 The Two Input Files . . . . . . . . . . . 2.2.2 Formatted Tokens . . . . . . . . . . . . 2.2.3 Regular Expressions . . . . . . . . . . . 2.2.4 Formatted Grammar . . . . . . . . . . . 2.2.5 Prettyprinting with Format Instructions 2.2.6 Formatting Instructions . . . . . . . . . 2.3 Writing Prettyprinting Grammars . . . . . . . 2.3.1 Modifying an existing grammar . . . . . 2.3.2 Writing a new Grammar from Scratch . 2.3.3 Context Free versus Context Sensitive . 2.3.4 Available Grammars . . . . . . . . . . . 2.3.5 Debugging Prettyprinting Grammars . . 2.3.6 Experiences . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

7 7 7 9 9 10 10 10 10 11 12 13 16 17 17 18 19 19 21

3 Pretzel Hacking 3.1 Adding C Code to the Rules . . . . . . . . . . 3.1.1 Example for Tokens . . . . . . . . . . . 3.1.2 Example for Grammars . . . . . . . . . 3.1.3 Summary . . . . . . . . . . . . . . . . . 3.1.4 Tips and Tricks . . . . . . . . . . . . . . 3.2 The Pretzel Interface . . . . . . . . . . . . . . . 3.2.1 The Prettyprinting Scanner . . . . . . . 3.2.2 The Prettyprinting Parser . . . . . . . . 3.2.3 Example . . . . . . . . . . . . . . . . . . 3.3 Building a Pretzel prettyprinter by Hand . . . 3.4 Obtaining a Pretzel Prettyprinting Module . . 3.4.1 The Prettyprinting Scanner . . . . . . . 3.4.2 The Prettyprinting Parser . . . . . . . . 3.5 Multiple Pretzel Modules in the same Program 3.6 Prettyprinting for non-LATEXians . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

23 23 23 24 25 26 26 27 28 29 30 30 30 31 31 32

3

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

4

CONTENTS 3.6.1 3.6.2

Other Markup Formatters . . . . . . . . . . . . . . . . . . . . Going for HTML . . . . . . . . . . . . . . . . . . . . . . . . .

32 33

4 Pretzel meets noweb 4.1 Prettyprinting in noweb – How it works . . . . . . 4.1.1 A noweb Prettyprinter for C . . . . . . . . 4.1.2 A noweb Prettyprinter for Java . . . . . . . 4.1.3 Writing Prettyprinting Grammars for noweb 4.1.4 Debugging . . . . . . . .