دسترسی نامحدود
برای کاربرانی که ثبت نام کرده اند
برای ارتباط با ما می توانید از طریق شماره موبایل زیر از طریق تماس و پیامک با ما در ارتباط باشید
در صورت عدم پاسخ گویی از طریق پیامک با پشتیبان در ارتباط باشید
برای کاربرانی که ثبت نام کرده اند
درصورت عدم همخوانی توضیحات با کتاب
از ساعت 7 صبح تا 10 شب
دسته بندی: کامپیوتر ویرایش: 1 نویسندگان: Martin Fowler سری: ISBN (شابک) : 0321712943, 9780321712943 ناشر: Addison-Wesley Professional سال نشر: 2010 تعداد صفحات: 412 زبان: English فرمت فایل : PDF (درصورت درخواست کاربر به PDF، EPUB یا AZW3 تبدیل می شود) حجم فایل: 6 مگابایت
کلمات کلیدی مربوط به کتاب زبانهای خاص دامنه (سریهای امضای آدیسون-وسلی (فاولر)): کتابخانه، ادبیات کامپیوتر
در صورت تبدیل فایل کتاب Domain-Specific Languages (Addison-Wesley Signature Series (Fowler)) به فرمت های PDF، EPUB، AZW3، MOBI و یا DJVU می توانید به پشتیبان اطلاع دهید تا فایل مورد نظر را تبدیل نمایند.
توجه داشته باشید کتاب زبانهای خاص دامنه (سریهای امضای آدیسون-وسلی (فاولر)) نسخه زبان اصلی می باشد و کتاب ترجمه شده به فارسی نمی باشد. وبسایت اینترنشنال لایبرری ارائه دهنده کتاب های زبان اصلی می باشد و هیچ گونه کتاب ترجمه شده یا نوشته شده به فارسی را ارائه نمی دهد.
هنگامی که به دقت انتخاب و استفاده میشود، زبانهای اختصاصی دامنه (DSL) ممکن است کدهای پیچیده را سادهسازی کنند، ارتباط مؤثر با مشتریان را ارتقا دهند، بهرهوری را بهبود بخشند و گلوگاههای توسعه را باز کنند. مارتین فاولر، متخصص توسعه نرمافزار، در زبانهای مخصوص دامنه، ابتدا اطلاعاتی را که متخصصان نرمافزار نیاز دارند برای تصمیمگیری در مورد استفاده از DSL و زمان استفاده از آنها، فراهم میکند. سپس، در جایی که DSL ها مناسب هستند، فاولر تکنیک های موثری را برای ساخت آنها ارائه می دهد و مهندسان نرم افزار را در انتخاب رویکردهای مناسب برای برنامه های خود راهنمایی می کند. تکنیک های این کتاب ممکن است با اکثر زبان های شی گرا مدرن استفاده شود. نویسنده نمونه های متعددی را در جاوا و سی شارپ و همچنین نمونه های انتخاب شده در روبی ارائه می دهد. هر جا که ممکن باشد، فصلها به گونهای سازماندهی میشوند که مستقل باشند و بیشتر موضوعات مرجع در قالب الگوهای آشنا ارائه میشوند. با مسلح شدن به این کتاب گسترده، توسعه دهندگان دانش مورد نیاز برای تصمیم گیری های مهم در مورد DSL ها را خواهند داشت - و در صورت لزوم، مزایای فنی و تجاری قابل توجهی را که ارائه می دهند به دست می آورند. موضوعات تحت پوشش عبارتند از: • چگونه DSLها با چارچوبها و کتابخانهها مقایسه میشوند، و چه زمانی آن گزینهها کافی هستند • استفاده از تجزیهکنندهها و مولدهای تجزیهکننده، و تجزیه DSLهای خارجی • درک، مقایسه و انتخاب ساختارهای زبان DSL • تعیین استفاده از تولید کد، و مقایسه استراتژیهای تولید کد • پیشنمایش ابزارهای میز کار زبان جدید برای ایجاد DSL
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
Cover......Page 1
Contents......Page 10
Preface......Page 22
Part I: Narratives......Page 32
Gothic Security......Page 34
The State Machine Model......Page 36
Programming Miss Grant’s Controller......Page 40
Languages and Semantic Model......Page 47
Using Code Generation......Page 50
Using Language Workbenches......Page 53
Visualization......Page 55
Defining Domain-Specific Languages......Page 58
Why Use a DSL?......Page 64
Problems with DSLs......Page 67
Wider Language Processing......Page 70
DSL Lifecycle......Page 71
What Makes a Good DSL Design?......Page 73
Architecture of DSL Processing......Page 74
The Workings of a Parser......Page 78
Grammars, Syntax, and Semantics......Page 80
Parsing Data......Page 81
Macros......Page 83
Testing DSLs......Page 84
Handling Errors......Page 93
Migrating DSLs......Page 95
Chapter 4: Implementing an Internal DSL......Page 98
Fluent and Command-Query APIs......Page 99
The Need for a Parsing Layer......Page 102
Using Functions......Page 103
Literal Collections......Page 108
Using Grammars to Choose Internal Elements......Page 110
Closures......Page 111
Parse Tree Manipulation......Page 113
Annotation......Page 115
Reducing the Syntactic Noise......Page 116
Dynamic Reception......Page 117
Providing Some Type Checking......Page 118
Syntactic Analysis Strategy......Page 120
Output Production Strategy......Page 123
Parsing Concepts......Page 125
Mixing-in Another Language......Page 131
XML DSLs......Page 132
Learning Curve......Page 136
Cost of Building......Page 137
Programmer Familiarity......Page 138
Mixing In the Host Language......Page 139
Strong Expressiveness Boundary......Page 140
Sliding into Generality......Page 141
Summing Up......Page 142
Chapter 7: Alternative Computational Models......Page 144
A Few Alternative Models......Page 147
Chapter 8: Code Generation......Page 152
Choosing What to Generate......Page 153
How to Generate......Page 155
Mixing Generated and Handwritten Code......Page 157
Generating Readable Code......Page 158
Further Reading......Page 159
Chapter 9: Language Workbenches......Page 160
Elements of Language Workbenches......Page 161
Schema Definition Languages and Meta-Models......Page 162
Source and Projectional Editing......Page 167
Illustrative Programming......Page 169
Tools Tour......Page 171
Language Workbenches and CASE tools......Page 172
Should You Use a Language Workbench?......Page 173
Part II: Common Topics......Page 176
Graphviz......Page 178
JMock......Page 180
CSS......Page 181
Hibernate Query Language (HQL)......Page 182
XAML......Page 183
FIT......Page 186
Make et al.......Page 187
How It Works......Page 190
When to Use It......Page 193
The Introductory Example (Java)......Page 194
Chapter 12: Symbol Table......Page 196
How It Works......Page 197
Dependency Network in an External DSL (Java and ANTLR)......Page 199
Using Symbolic Keys in an Internal DSL (Ruby)......Page 201
Using Enums for Statically Typed Symbols (Java)......Page 203
How It Works......Page 206
Reading an INI File (C#)......Page 207
How It Works......Page 210
Building Simple Flight Data (C#)......Page 211
Chapter 15: Macro......Page 214
How It Works......Page 215
When to Use It......Page 223
Chapter 16: Notification......Page 224
A Very Simple Notification (C#)......Page 225
Parsing Notification (Java)......Page 226
Part III: External DSL Topics......Page 230
How It Works......Page 232
When to Use It......Page 235
Frequent Customer Points (C#)......Page 236
Parsing Nonautonomous Statements with Miss Grant’s Controller (Java)......Page 242
Chapter 18: Syntax-Directed Translation......Page 250
How It Works......Page 251
Further Reading......Page 258
How It Works......Page 260
When to Use It......Page 269
Chapter 20: Regex Table Lexer......Page 270
How It Works......Page 271
Lexing Miss Grant’s Controller (Java)......Page 272
Chapter 21: Recursive Descent Parser......Page 276
How It Works......Page 277
Further Reading......Page 280
Recursive Descent and Miss Grant’s Controller (Java)......Page 281
Chapter 22: Parser Combinator......Page 286
How It Works......Page 287
Parser Combinators and Miss Grant’s Controller (Java)......Page 292
How It Works......Page 300
Hello World (Java and ANTLR)......Page 303
How It Works......Page 312
Using ANTLR’s Tree Construction Syntax (Java and ANTLR)......Page 315
Tree Construction Using Code Actions (Java and ANTLR)......Page 323
How It Works......Page 330
Miss Grant’s Controller (Java and ANTLR)......Page 331
How It Works......Page 336
A Calculator (ANTLR and Java)......Page 337
How It Works......Page 340
Embedding Dynamic Code (ANTLR, Java, and Javascript)......Page 342
How It Works......Page 350
When to Use It......Page 357
How It Works......Page 358
When to Use It......Page 362
How It Works......Page 364
When to Use It......Page 366
Syntactic Indentation......Page 368
Modular Grammars......Page 370
Part IV: Internal DSL Topics......Page 372
Chapter 32: Expression Builder......Page 374
When to Use It......Page 375
A Fluent Calendar with and without a Builder (Java)......Page 376
Using Multiple Builders for the Calendar (Java)......Page 379
How It Works......Page 382
Simple Computer Configuration (Java)......Page 383
How It Works......Page 388
When to Use It......Page 390
The Simple Computer Configuration Example (Java)......Page 391
Handling Multiple Different Arguments with Tokens (C#)......Page 392
Using Subtype Tokens for IDE Support (Java)......Page 394
Using Object Initializers (C#)......Page 396
Recurring Events (C#)......Page 397
How It Works......Page 404
When to Use It......Page 408
The Simple Computer Configuration Example (Java)......Page 409
Chaining with Properties (C#)......Page 412
Progressive Interfaces (C#)......Page 413
Chapter 36: Object Scoping......Page 416
When to Use It......Page 417
Security Codes (C#)......Page 418
Using Instance Evaluation (Ruby)......Page 423
Using an Instance Initializer (Java)......Page 425
How It Works......Page 428
When to Use It......Page 433
How It Works......Page 434
Wrapping a Function Sequence in a Nested Closure (Ruby)......Page 436
Simple C# Example (C#)......Page 439
Using Method Chaining (Ruby)......Page 440
Function Sequence with Explicit Closure Arguments (Ruby)......Page 442
Using Instance Evaluation (Ruby)......Page 443
When to Use It......Page 448
How It Works......Page 450
The Computer Configuration Using Lists and Maps (Ruby)......Page 451
Evolving to Greenspun Form (Ruby)......Page 453
Chapter 41: Dynamic Reception......Page 458
How It Works......Page 459
When to Use It......Page 460
Promotion Points Using Parsed Method Names (Ruby)......Page 461
Promotion Points Using Chaining (Ruby)......Page 465
Removing Quoting in the Secret Panel Controller (JRuby)......Page 469
Chapter 42: Annotation......Page 476
How It Works......Page 477
Custom Syntax with Runtime Processing (Java)......Page 480
Using a Class Method (Ruby)......Page 482
Dynamic Code Generation (Ruby)......Page 483
How It Works......Page 486
When to Use It......Page 487
Generating IMAP Queries from C# Conditions (C#)......Page 488
Chapter 44: Class Symbol Table......Page 498
How It Works......Page 499
Statically Typed Class Symbol Table (Java)......Page 500
How It Works......Page 508
Polished Discount Rules (Ruby)......Page 509
How It Works......Page 512
When to Use It......Page 513
Recipe Ingredients (C#)......Page 514
Part V: Alternative Computational Models......Page 516
Chapter 47: Adaptive Model......Page 518
How It Works......Page 519
When to Use It......Page 523
How It Works......Page 526
Calculating the Fee for an Order (C#)......Page 528
Chapter 49: Dependency Network......Page 536
How It Works......Page 537
Analyzing Potions (C#)......Page 539
Chapter 50: Production Rule System......Page 544
How It Works......Page 545
Validations for club membership (C#)......Page 548
Eligibility Rules: extending the club membership (C#)......Page 552
How It Works......Page 558
When to Use It......Page 560
Secret Panel Controller (Java)......Page 561
Part VI: Code Generation......Page 562
How It Works......Page 564
Secret Panel Controller (Java generating C)......Page 566
How It Works......Page 570
Generating the Secret Panel State Machine with Nested Conditionals (Velocity and Java generating C)......Page 572
Chapter 54: Embedment Helper......Page 578
How It Works......Page 579
Secret Panel States (Java and ANTLR)......Page 580
Should a Helper Generate HTML? (Java and Velocity)......Page 583
Chapter 55: Model-Aware Generation......Page 586
When to Use It......Page 587
Secret Panel State Machine (C)......Page 588
Loading the State Machine Dynamically (C)......Page 595
How It Works......Page 598
Secret Panel State Machine as Nested Conditionals (C)......Page 599
How It Works......Page 602
Generating Classes from a Data Schema (Java and a Little Ruby)......Page 604
Bibliography......Page 610
A......Page 612
C......Page 613
D......Page 615
E......Page 617
G......Page 618
J......Page 619
M......Page 620
N......Page 621
P......Page 622
R......Page 623
S......Page 624
T......Page 626
V......Page 627
Y......Page 628