Domain-specific languages

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 in...

Descripción completa

Detalles Bibliográficos
Otros Autores: Fowler, Martin Author (author), Parsons, Rebecca Contributor (contributor)
Formato: Libro electrónico
Idioma:Inglés
Publicado: [Place of publication not identified] Addison Wesley 2010
Edición:1st edition
Colección:The Addison-Wesley signature series
Materias:
Ver en Biblioteca Universitat Ramon Llull:https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009629248306719
Tabla de Contenidos:
  • Cover
  • Contents
  • Preface
  • Part I: Narratives
  • Chapter 1: An Introductory Example
  • Gothic Security
  • The State Machine Model
  • Programming Miss Grant's Controller
  • Languages and Semantic Model
  • Using Code Generation
  • Using Language Workbenches
  • Visualization
  • Chapter 2: Using Domain-Specifc Languages
  • Defining Domain-Specific Languages
  • Why Use a DSL?
  • Problems with DSLs
  • Wider Language Processing
  • DSL Lifecycle
  • What Makes a Good DSL Design?
  • Chapter 3: Implementing DSLs
  • Architecture of DSL Processing
  • The Workings of a Parser
  • Grammars, Syntax, and Semantics
  • Parsing Data
  • Macros
  • Testing DSLs
  • Handling Errors
  • Migrating DSLs
  • Chapter 4: Implementing an Internal DSL
  • Fluent and Command-Query APIs
  • The Need for a Parsing Layer
  • Using Functions
  • Literal Collections
  • Using Grammars to Choose Internal Elements
  • Closures
  • Parse Tree Manipulation
  • Annotation
  • Literal Extension
  • Reducing the Syntactic Noise
  • Dynamic Reception
  • Providing Some Type Checking
  • Chapter 5: Implementing an External DSL
  • Syntactic Analysis Strategy
  • Output Production Strategy
  • Parsing Concepts
  • Mixing-in Another Language
  • XML DSLs
  • Chapter 6: Choosing between Internal and External DSLs
  • Learning Curve
  • Cost of Building
  • Programmer Familiarity
  • Communication with Domain Experts
  • Mixing In the Host Language
  • Strong Expressiveness Boundary
  • Runtime Configuration
  • Sliding into Generality
  • Composing DSLs
  • Summing Up
  • Chapter 7: Alternative Computational Models
  • A Few Alternative Models
  • Chapter 8: Code Generation
  • Choosing What to Generate
  • How to Generate
  • Mixing Generated and Handwritten Code
  • Generating Readable Code
  • Preparse Code Generation
  • Further Reading
  • Chapter 9: Language Workbenches
  • Elements of Language Workbenches.
  • Schema Definition Languages and Meta-Models
  • Source and Projectional Editing
  • Illustrative Programming
  • Tools Tour
  • Language Workbenches and CASE tools
  • Should You Use a Language Workbench?
  • Part II: Common Topics
  • Chapter 10: A Zoo of DSLs
  • Graphviz
  • JMock
  • CSS
  • Hibernate Query Language (HQL)
  • XAML
  • FIT
  • Make et al.
  • Chapter 11: Semantic Model
  • How It Works
  • When to Use It
  • The Introductory Example (Java)
  • Chapter 12: Symbol Table
  • How It Works
  • When to Use It
  • Further Reading
  • Dependency Network in an External DSL (Java and ANTLR)
  • Using Symbolic Keys in an Internal DSL (Ruby)
  • Using Enums for Statically Typed Symbols (Java)
  • Chapter 13: Context Variable
  • How It Works
  • When to Use It
  • Reading an INI File (C#)
  • Chapter 14: Construction Builder
  • How It Works
  • When to Use It
  • Building Simple Flight Data (C#)
  • Chapter 15: Macro
  • How It Works
  • When to Use It
  • Chapter 16: Notification
  • How It Works
  • When to Use It
  • A Very Simple Notification (C#)
  • Parsing Notification (Java)
  • Part III: External DSL Topics
  • Chapter 17: Delimiter-Directed Translation
  • How It Works
  • When to Use It
  • Frequent Customer Points (C#)
  • Parsing Nonautonomous Statements with Miss Grant's Controller (Java)
  • Chapter 18: Syntax-Directed Translation
  • How It Works
  • When to Use It
  • Further Reading
  • Chapter 19: BNF
  • How It Works
  • When to Use It
  • Chapter 20: Regex Table Lexer
  • How It Works
  • When to Use It
  • Lexing Miss Grant's Controller (Java)
  • Chapter 21: Recursive Descent Parser
  • How It Works
  • When to Use It
  • Further Reading
  • Recursive Descent and Miss Grant's Controller (Java)
  • Chapter 22: Parser Combinator
  • How It Works
  • When to Use It
  • Parser Combinators and Miss Grant's Controller (Java)
  • Chapter 23: Parser Generator
  • How It Works
  • When to Use It.
  • Hello World (Java and ANTLR)
  • Chapter 24: Tree Construction
  • How It Works
  • When to Use It
  • Using ANTLR's Tree Construction Syntax (Java and ANTLR)
  • Tree Construction Using Code Actions (Java and ANTLR)
  • Chapter 25: Embedded Translation
  • How It Works
  • When to Use It
  • Miss Grant's Controller (Java and ANTLR)
  • Chapter 26: Embedded Interpretation
  • How It Works
  • When to Use It
  • A Calculator (ANTLR and Java)
  • Chapter 27: Foreign Code
  • How It Works
  • When to Use It
  • Embedding Dynamic Code (ANTLR, Java, and Javascript)
  • Chapter 28: Alternative Tokenization
  • How It Works
  • When to Use It
  • Chapter 29: Nested Operator Expression
  • How It Works
  • When to Use It
  • Chapter 30: Newline Separators
  • How It Works
  • When to Use It
  • Chapter 31: External DSL Miscellany
  • Syntactic Indentation
  • Modular Grammars
  • Part IV: Internal DSL Topics
  • Chapter 32: Expression Builder
  • How It Works
  • When to Use It
  • A Fluent Calendar with and without a Builder (Java)
  • Using Multiple Builders for the Calendar (Java)
  • Chapter 33: Function Sequence
  • How It Works
  • When to Use It
  • Simple Computer Configuration (Java)
  • Chapter 34: Nested Function
  • How It Works
  • When to Use It
  • The Simple Computer Configuration Example (Java)
  • Handling Multiple Different Arguments with Tokens (C#)
  • Using Subtype Tokens for IDE Support (Java)
  • Using Object Initializers (C#)
  • Recurring Events (C#)
  • Chapter 35: Method Chaining
  • How It Works
  • When to Use It
  • The Simple Computer Configuration Example (Java)
  • Chaining with Properties (C#)
  • Progressive Interfaces (C#)
  • Chapter 36: Object Scoping
  • How It Works
  • When to Use It
  • Security Codes (C#)
  • Using Instance Evaluation (Ruby)
  • Using an Instance Initializer (Java)
  • Chapter 37: Closure
  • How It Works
  • When to Use It
  • Chapter 38: Nested Closure.
  • How It Works
  • When to Use It
  • Wrapping a Function Sequence in a Nested Closure (Ruby)
  • Simple C# Example (C#)
  • Using Method Chaining (Ruby)
  • Function Sequence with Explicit Closure Arguments (Ruby)
  • Using Instance Evaluation (Ruby)
  • Chapter 39: Literal List
  • How It Works
  • When to Use It
  • Chapter 40: Literal Map
  • How It Works
  • When to Use It
  • The Computer Configuration Using Lists and Maps (Ruby)
  • Evolving to Greenspun Form (Ruby)
  • Chapter 41: Dynamic Reception
  • How It Works
  • When to Use It
  • Promotion Points Using Parsed Method Names (Ruby)
  • Promotion Points Using Chaining (Ruby)
  • Removing Quoting in the Secret Panel Controller (JRuby)
  • Chapter 42: Annotation
  • How It Works
  • When to Use It
  • Custom Syntax with Runtime Processing (Java)
  • Using a Class Method (Ruby)
  • Dynamic Code Generation (Ruby)
  • Chapter 43: Parse Tree Manipulation
  • How It Works
  • When to Use It
  • Generating IMAP Queries from C# Conditions (C#)
  • Chapter 44: Class Symbol Table
  • How It Works
  • When to Use It
  • Statically Typed Class Symbol Table (Java)
  • Chapter 45: Textual Polishing
  • How It Works
  • When to Use It
  • Polished Discount Rules (Ruby)
  • Chapter 46: Literal Extension
  • How It Works
  • When to Use It
  • Recipe Ingredients (C#)
  • Part V: Alternative Computational Models
  • Chapter 47: Adaptive Model
  • How It Works
  • When to Use It
  • Chapter 48: Decision Table
  • How It Works
  • When to Use It
  • Calculating the Fee for an Order (C#)
  • Chapter 49: Dependency Network
  • How It Works
  • When to Use It
  • Analyzing Potions (C#)
  • Chapter 50: Production Rule System
  • How It Works
  • When to Use It
  • Validations for club membership (C#)
  • Eligibility Rules: extending the club membership (C#)
  • Chapter 51: State Machine
  • How It Works
  • When to Use It
  • Secret Panel Controller (Java).
  • Part VI: Code Generation
  • Chapter 52: Transformer Generation
  • How It Works
  • When to Use It
  • Secret Panel Controller (Java generating C)
  • Chapter 53: Templated Generation
  • How It Works
  • When to Use It
  • Generating the Secret Panel State Machine with Nested Conditionals (Velocity and Java generating C)
  • Chapter 54: Embedment Helper
  • How It Works
  • When to Use It
  • Secret Panel States (Java and ANTLR)
  • Should a Helper Generate HTML? (Java and Velocity)
  • Chapter 55: Model-Aware Generation
  • How It Works
  • When to Use It
  • Secret Panel State Machine (C)
  • Loading the State Machine Dynamically (C)
  • Chapter 56: Model Ignorant Generation
  • How It Works
  • When to Use It
  • Secret Panel State Machine as Nested Conditionals (C)
  • Chapter 57: Generation Gap
  • How It Works
  • When to Use It
  • Generating Classes from a Data Schema (Java and a Little Ruby)
  • Bibliography
  • Index.