Domain-Specific Languages
Home > Computing and Information Technology > Computer programming / software engineering > Programming and scripting languages: general > Domain-Specific Languages
Domain-Specific Languages

Domain-Specific Languages

|
     0     
5
4
3
2
1




Out of Stock


Notify me when this book is in stock
About the Book

When carefully selected and used, Domain-Specific Languages (DSLs) may simplify complex code, promote effective communication with customers, improve productivity, and unclog development bottlenecks. In Domain-Specific Languages, noted software development expert Martin Fowler first provides the information software professionals need to decide if and when to utilize DSLs. Then, where DSLs prove suitable, Fowler presents effective techniques for building them, and guides software engineers in choosing the right approaches for their applications.   This book’s techniques may be utilized with most modern object-oriented languages; the author provides numerous examples in Java and C#, as well as selected examples in Ruby. Wherever possible, chapters are organized to be self-standing, and most reference topics are presented in a familiar patterns format.   Armed with this wide-ranging book, developers will have the knowledge they need to make important decisions about DSLs—and, where appropriate, gain the significant technical and business benefits they offer.   The topics covered include: How DSLs compare to frameworks and libraries, and when those alternatives are sufficient Using parsers and parser generators, and parsing external DSLs Understanding, comparing, and choosing DSL language constructs Determining whether to use code generation, and comparing code generation strategies Previewing new language workbench tools for creating DSLs

Table of Contents:
Preface xix Part I: Narratives 1 Chapter 1: An Introductory Example 3 Gothic Security 3 The State Machine Model 5 Programming Miss Grant’s Controller 9 Languages and Semantic Model 16 Using Code Generation 19 Using Language Workbenches 22 Visualization 24 Chapter 2: Using Domain-Specific Languages 27 Defining Domain-Specific Languages 27 Why Use a DSL? 33 Problems with DSLs 36 Wider Language Processing 39 DSL Lifecycle 40 What Makes a Good DSL Design? 42 Chapter 3: Implementing DSLs 43 Architecture of DSL Processing 43 The Workings of a Parser 47 Grammars, Syntax, and Semantics 49 Parsing Data 50 Macros 52 Chapter 4: Implementing an Internal DSL 67 Fluent and Command-Query APIs 68 The Need for a Parsing Layer 71 Using Functions 72 Literal Collections 77 Using Grammars to Choose Internal Elements 79 Closures 80 Parse Tree Manipulation 82 Annotation 84 Literal Extension 85 Reducing the Syntactic Noise 85 Dynamic Reception 86 Providing Some Type Checking 87 Chapter 5: Implementing an External DSL 89 Syntactic Analysis Strategy 89 Output Production Strategy 92 Parsing Concepts 94 Mixing-in Another Language 100 XML DSLs 101 Chapter 6: Choosing between Internal and External DSLs 105 Learning Curve 105 Cost of Building 106 Programmer Familiarity 107 Communication with Domain Experts 108 Mixing In the Host Language 108 Strong Expressiveness Boundary 109 Runtime Configuration 110 Sliding into Generality 110 Composing DSLs 111 Summing Up 111 Chapter 7: Alternative Computational Models 113 A Few Alternative Models 116 Chapter 8: Code Generation 121 Choosing What to Generate 122 How to Generate 124 Mixing Generated and Handwritten Code 126 Generating Readable Code 127 Preparse Code Generation 128 Further Reading 128 Chapter 9: Language Workbenches 129 Elements of Language Workbenches 130 Schema Definition Languages and Meta-Models 131 Source and Projectional Editing 136 Illustrative Programming 138 Tools Tour 140 Language Workbenches and CASE tools 141 Should You Use a Language Workbench? 142 Part II: Common Topics 145 Chapter 10: A Zoo of DSLs 147 Graphviz 147 JMock 149 CSS 150 Hibernate Query Language (HQL) 151 XAML 152 FIT 155 Make et al. 156 Chapter 11: Semantic Model 159 How It Works 159 When to Use It 162 The Introductory Example (Java) 163 Chapter 12: Symbol Table 165 How It Works 166 When to Use It 168 Further Reading 168 Dependency Network in an External DSL (Java and ANTLR) 168 Using Symbolic Keys in an Internal DSL (Ruby) 170 Using Enums for Statically Typed Symbols (Java) 172 Chapter 13: Context Variable 175 How It Works 175 When to Use It 176 Reading an INI File (C#) 176 Chapter 14: Construction Builder 179 How It Works 179 When to Use It 180 Building Simple Flight Data (C#) 180 Chapter 15: Macro 183 How It Works 184 When to Use It 192 Chapter 16: Notification 193 How It Works 194 When to Use It 194 A Very Simple Notification (C#) 194 Parsing Notification (Java) 195 Part III: External DSL Topics 199 Chapter 17: Delimiter-Directed Translation 201 How It Works 201 When to Use It 204 Frequent Customer Points (C#) 205 Parsing Nonautonomous Statements with Miss Grant’s Controller (Java) 211 Chapter 18: Syntax-Directed Translation 219 How It Works 220 When to Use It 227 Further Reading 227 Chapter 19: BNF 229 How It Works 229 When to Use It 238 Chapter 20: Regex Table Lexer (by Rebecca Parsons) 239 How It Works 240 When to Use It 241 Lexing Miss Grant’s Controller (Java) 241 Chapter 21: Recursive Descent Parser (by Rebecca Parsons) 245 How It Works 246 When to Use It 249 Further Reading 249 Recursive Descent and Miss Grant’s Controller (Java) 250 Chapter 22: Parser Combinator (by Rebecca Parsons) 255 How It Works 256 When to Use It 261 Parser Combinators and Miss Grant’s Controller (Java) 261 Chapter 23: Parser Generator 269 How It Works 269 When to Use It 272 Hello World (Java and ANTLR) 272 Chapter 24: Tree Construction 281 How It Works 281 When to Use It 284 Using ANTLR’s Tree Construction Syntax (Java and ANTLR) 284 Tree Construction Using Code Actions (Java and ANTLR) 292 Chapter 25: Embedded Translation 299 How It Works 299 When to Use It 300 Miss Grant’s Controller (Java and ANTLR) 300 Chapter 26: Embedded Interpretation 305 How It Works 305 When to Use It 306 A Calculator (ANTLR and Java) 306 Chapter 27: Foreign Code 309 How It Works 309 When to Use It 311 Embedding Dynamic Code (ANTLR, Java, and Javascript) 311 Chapter 28: Alternative Tokenization 319 How It Works 319 When to Use It 326 Chapter 29: Nested Operator Expression 327 How It Works 327 When to Use It 331 Chapter 30: Newline Separators 333 How It Works 333 When to Use It 335 Chapter 31: External DSL Miscellany 337 Syntactic Indentation 337 Modular Grammars 339 Part IV: Internal DSL Topics 341 Chapter 32: Expression Builder 343 How It Works 344 When to Use It 344 A Fluent Calendar with and without a Builder (Java) 345 Using Multiple Builders for the Calendar (Java) 348 Chapter 33: Function Sequence 351 How It Works 351 When to Use It 352 Simple Computer Configuration (Java) 352 Chapter 34: Nested Function 357 How It Works 357 When to Use It 359 The Simple Computer Configuration Example (Java) 360 Handling Multiple Different Arguments with Tokens (C#) 361 Using Subtype Tokens for IDE Support (Java) 363 Using Object Initializers (C#) 365 Recurring Events (C#) 366 Chapter 35: Method Chaining 373 How It Works 373 When to Use It 377 The Simple Computer Configuration Example (Java) 378 Chaining with Properties (C#) 381 Progressive Interfaces (C#) 382 Chapter 36: Object Scoping 385 How It Works 386 When to Use It 386 Security Codes (C#) 387 Using Instance Evaluation (Ruby) 392 Using an Instance Initializer (Java) 394 Chapter 37: Closure 397 How It Works 397 When to Use It 402 Chapter 38: Nested Closure 403 How It Works 403 When to Use It 405 Wrapping a Function Sequence in a Nested Closure (Ruby) 405 Simple C# Example (C#) 408 Using Method Chaining (Ruby) 409 Function Sequence with Explicit Closure Arguments (Ruby 411 Using Instance Evaluation (Ruby) 412 Chapter 39: Literal List 417 How It Works 417 When to Use It 417 Chapter 40: Literal Map 419 How It Works 419 When to Use It 420 The Computer Configuration Using Lists and Maps (Ruby) 420 Evolving to Greenspun Form (Ruby) 422 Chapter 41: Dynamic Reception 427 How It Works 428 When to Use It 429 Promotion Points Using Parsed Method Names (Ruby) 430 Promotion Points Using Chaining (Ruby) 434 Removing Quoting in the Secret Panel Controller (JRuby) 438 Chapter 42: Annotation 445 How It Works 446 When to Use It 449 Custom Syntax with Runtime Processing (Java) 449 Using a Class Method (Ruby) 451 Dynamic Code Generation (Ruby) 452 Chapter 43: Parse Tree Manipulation 455 How It Works 455 When to Use It 456 Generating IMAP Queries from C# Conditions (C#) 457 Chapter 44: Class Symbol Table 467 How It Works 468 When to Use It 469 Statically Typed Class Symbol Table (Java) 469 Chapter 45: Textual Polishing 477 How It Works 477 When to Use It 478 Polished Discount Rules (Ruby) 478 Chapter 46: Literal Extension 481 How It Works 481 When to Use It 482 Recipe Ingredients (C#) 483 Part V: Alternative Computational Models 485 Chapter 47: Adaptive Model 487 How It Works 488 When to Use It 492 Chapter 48: Decision Table 495 How It Works 495 When to Use It 497 Calculating the Fee for an Order (C#) 497 Chapter 49: Dependency Network 505 How It Works 506 When to Use It 508 Analyzing Potions (C#) 508 Chapter 50: Production Rule System 513 How It Works 514 When to Use It 517 Validations for club membership (C#) 517 Eligibility Rules: extending the club membership (C#) 521 Chapter 51: State Machine 527 How It Works 527 When to Use It 529 Secret Panel Controller (Java) 530 Part VI: Code Generation 531 Chapter 52: Transformer Generation 533 How It Works 533 When to Use It 535 Secret Panel Controller (Java generating C) 535 Chapter 53: Templated Generation 539 How It Works 539 When to Use It 541 Generating the Secret Panel State Machine with Nested Conditionals (Velocity and Java generating C) 541 Chapter 54: Embedment Helper 547 How It Works 548 When to Use It 549 Secret Panel States (Java and ANTLR) 549 Should a Helper Generate HTML? (Java and Velocity) 552 Chapter 55: Model-Aware Generation 555 How It Works 556 When to Use It 556 Secret Panel State Machine (C) 557 Loading the State Machine Dynamically (C) 564 Chapter 56: Model Ignorant Generation 567 How It Works 567 When to Use It 568 Secret Panel State Machine as Nested Conditionals (C) 568 Chapter 57: Generation Gap 571 How It Works 571 When to Use It 573 Generating Classes from a Data Schema (Java and a Little Ruby) 573 Bibliography 579 Index 581


Best Sellers


Product Details
  • ISBN-13: 9780131392809
  • Publisher: Pearson Education (US)
  • Publisher Imprint: Addison Wesley
  • Language: English
  • Weight: 1 gr
  • ISBN-10: 0131392808
  • Publisher Date: 23 Sep 2010
  • Binding: Digital download
  • No of Pages: 640


Similar Products

Add Photo
Add Photo

Customer Reviews

REVIEWS      0     
Click Here To Be The First to Review this Product
Domain-Specific Languages
Pearson Education (US) -
Domain-Specific Languages
Writing guidlines
We want to publish your review, so please:
  • keep your review on the product. Review's that defame author's character will be rejected.
  • Keep your review focused on the product.
  • Avoid writing about customer service. contact us instead if you have issue requiring immediate attention.
  • Refrain from mentioning competitors or the specific price you paid for the product.
  • Do not include any personally identifiable information, such as full names.

Domain-Specific Languages

Required fields are marked with *

Review Title*
Review
    Add Photo Add up to 6 photos
    Would you recommend this product to a friend?
    Tag this Book Read more
    Does your review contain spoilers?
    What type of reader best describes you?
    I agree to the terms & conditions
    You may receive emails regarding this submission. Any emails will include the ability to opt-out of future communications.

    CUSTOMER RATINGS AND REVIEWS AND QUESTIONS AND ANSWERS TERMS OF USE

    These Terms of Use govern your conduct associated with the Customer Ratings and Reviews and/or Questions and Answers service offered by Bookswagon (the "CRR Service").


    By submitting any content to Bookswagon, you guarantee that:
    • You are the sole author and owner of the intellectual property rights in the content;
    • All "moral rights" that you may have in such content have been voluntarily waived by you;
    • All content that you post is accurate;
    • You are at least 13 years old;
    • Use of the content you supply does not violate these Terms of Use and will not cause injury to any person or entity.
    You further agree that you may not submit any content:
    • That is known by you to be false, inaccurate or misleading;
    • That infringes any third party's copyright, patent, trademark, trade secret or other proprietary rights or rights of publicity or privacy;
    • That violates any law, statute, ordinance or regulation (including, but not limited to, those governing, consumer protection, unfair competition, anti-discrimination or false advertising);
    • That is, or may reasonably be considered to be, defamatory, libelous, hateful, racially or religiously biased or offensive, unlawfully threatening or unlawfully harassing to any individual, partnership or corporation;
    • For which you were compensated or granted any consideration by any unapproved third party;
    • That includes any information that references other websites, addresses, email addresses, contact information or phone numbers;
    • That contains any computer viruses, worms or other potentially damaging computer programs or files.
    You agree to indemnify and hold Bookswagon (and its officers, directors, agents, subsidiaries, joint ventures, employees and third-party service providers, including but not limited to Bazaarvoice, Inc.), harmless from all claims, demands, and damages (actual and consequential) of every kind and nature, known and unknown including reasonable attorneys' fees, arising out of a breach of your representations and warranties set forth above, or your violation of any law or the rights of a third party.


    For any content that you submit, you grant Bookswagon a perpetual, irrevocable, royalty-free, transferable right and license to use, copy, modify, delete in its entirety, adapt, publish, translate, create derivative works from and/or sell, transfer, and/or distribute such content and/or incorporate such content into any form, medium or technology throughout the world without compensation to you. Additionally,  Bookswagon may transfer or share any personal information that you submit with its third-party service providers, including but not limited to Bazaarvoice, Inc. in accordance with  Privacy Policy


    All content that you submit may be used at Bookswagon's sole discretion. Bookswagon reserves the right to change, condense, withhold publication, remove or delete any content on Bookswagon's website that Bookswagon deems, in its sole discretion, to violate the content guidelines or any other provision of these Terms of Use.  Bookswagon does not guarantee that you will have any recourse through Bookswagon to edit or delete any content you have submitted. Ratings and written comments are generally posted within two to four business days. However, Bookswagon reserves the right to remove or to refuse to post any submission to the extent authorized by law. You acknowledge that you, not Bookswagon, are responsible for the contents of your submission. None of the content that you submit shall be subject to any obligation of confidence on the part of Bookswagon, its agents, subsidiaries, affiliates, partners or third party service providers (including but not limited to Bazaarvoice, Inc.)and their respective directors, officers and employees.

    Accept

    New Arrivals

    Inspired by your browsing history


    Your review has been submitted!

    You've already reviewed this product!