EARTH WEEK
Go paperless and save 40% on eligible eBooks, 70% on video now through April 26. Shop the sale.
Rough Cuts are manuscripts that are developed but not yet published, available through Safari. Rough Cuts provide you access to the very latest information on a given topic and offer you the opportunity to interact with the author to influence the final publication.
This is a working draft of a pre-release book. It is available before the published date as part of the Rough Cuts service.
Software practitioners are rapidly discovering the immense value of Domain-Specific Languages (DSLs) in solving problems within clearly definable problem domains. Developers are applying DSLs to improve productivity and quality in a wide range of areas, such as finance, combat simulation, macro scripting, image generation, and more. But until now, there have been few practical resources that explain how DSLs work and how to construct them for optimal use.
Software Language Engineering fills that need. Written by expert DSL consultant Anneke Kleppe, this is the first comprehensive guide to successful DSL design. Kleppe systematically introduces and explains every ingredient of an effective
language specification, including its description of concepts, how those concepts are denoted, and what those concepts mean in relation to the problem domain. Kleppe carefully illuminates good design strategy, showing how to maximize the flexibility of the languages you create. She also demonstrates powerful techniques for creating new DSLs that cooperate well with general-purpose languages and leverage their power.
Completely tool-independent, this book can serve as the primary resource for readers using Microsoft DSL tools, the Eclipse Modeling Framework, openArchitectureWare, or any other DSL toolset. It contains multiple examples, an illustrative running case study, and insights and background information drawn from Kleppe’s leading-edge work as a DSL researcher.
Specific topics covered include
This book provides software engineers with all the guidance they need to create DSLs that solve real problems more rapidly, and with higher-quality code.
Background Information xvii
Preface xix
Foreword xxvii
Chapter 1: Why Software Language Engineering? 1
1.1 An Increasing Number of Languages 1
1.2 Software Languages 3
1.3 The Changing Nature of Software Languages 4
1.3.1 Graphical versus Textual Languages 5
1.3.2 Multiple Syntaxes 6
1.4 The Complexity Crisis 7
1.5 What We Can Learn From ... 8
1.5.1 Natural-Language Studies 9
1.5.2 Traditional Language Theory 10
1.5.3 Graph Theory 10
1.6 Summary 12
Chapter 2: Roles in Language Engineering 15
2.1 Different Processes, Different Actors 15
2.2 The Language User 16
2.2.1 Tool Set of the Language User 17
2.3 The Language Engineer 19
2.3.1 Tool Set for the Language Engineer 19
2.3.2 Tool Generators 20
2.4 Summary 21
Chapter 3: Languages and Mograms 23
3.1 What Is a Language? 23
3.1.1 Mogram, or Linguistic Utterance 24
3.1.2 Primitive Language Elements and Libraries 26
3.2 Abstraction Levels and Expressiveness 27
3.2.1 Abstract versus Incomplete 29
3.2.2 Raising the Level of Abstraction 29
3.2.3 Growing Business Expectations 31
3.2.4 Languages and Abstraction Levels 32
3.3 Domain-Specific Languages 33
3.3.1 Domain-Specific versus General Languages 33
3.3.2 Domain Experts versus Computer Experts 33
3.3.3 Large User Group versus Small User Group 34
3.3.4 Horizontal DSLs versus Vertical DSLs 35
3.3.5 DSLs versus Frameworks and APIs 37
3.3.6 DSLs as Software Languages 37
3.4 Summary 38
Chapter 4: Elements of a Language Specification 39
4.1 Language Specification 39
4.1.1 Forms of a Mogram 40
4.1.2 Parts 41
4.1.3 Creation Process 42
4.1.4 An Example 43
4.2 Formalisms to Specify Languages 47
4.2.1 Context-Free Grammars 47
4.2.2 Attributed Grammars 49
4.2.3 Graph Grammars 51
4.2.4 UML Profiling 52
4.2.5 Metamodeling 53
4.2.6 Formalism of Choice