model-driven software development - language workbenches & syntax definition
DESCRIPTION
Language Workbenches & Syntax DefinitionTRANSCRIPT
![Page 1: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/1.jpg)
Language Workbenches & Syntax Definition
Course IN4308Master Computer Science
Delft University of Technology
Eelco Visserhttp://eelcovisser.org
Lecture 6
![Page 2: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/2.jpg)
Part IIModeling Languages
![Page 3: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/3.jpg)
Language Workbenches
Lecture 6
![Page 4: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/4.jpg)
Language Modeling
Lectures 6-7
![Page 5: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/5.jpg)
Transformation, Generation, Analysis
Lectures 8-10
![Page 6: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/6.jpg)
Customization
Lecture 10
Codecustomize
Model
generate
![Page 7: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/7.jpg)
Advanced Topics
Lectures 12-14
Economics
★ costs and benefits of developing (with) DSLs
Evolution
★ maintenance of models and languages
Portability
★ supporting multiple platforms
Internal DSLs
★ library as a language
Language composition
★ combining multiple DSLs
![Page 8: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/8.jpg)
Language Workbenches
![Page 9: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/9.jpg)
Model
Code
AST
core
Errorsparse check
desugar
generate
Traditional Compiler Architecture
![Page 10: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/10.jpg)
Compiler Ingredients
Syntax definition
★ concrete syntax
★ abstract syntax
Static semantics
★ error checking
★ name resolution
★ type analysis
Model-to-model transformation
★ express constructs in core language
Code generation
★ translate core language models to implementation
![Page 11: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/11.jpg)
Integrated Development Environments
extended requirements for language definition
![Page 12: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/12.jpg)
Editor Services for Modern IDEs
Syntactic Editor Services
★ syntax checking
★ bracket matching
★ syntax highlighting
★ code folding
★ outline view
Semantic Editor Services
★ error checking
★ reference resolving
★ hover help
★ code completion
★ refactoring
![Page 13: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/13.jpg)
Demonstration: NWL in Spoofax
![Page 14: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/14.jpg)
Editor
Code
AST
core
IntegratedDevelopmentEnvironment
feedback
parse
![Page 15: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/15.jpg)
Architectural Requirements for IDEs
Editor services are based on AST
★ services analyze structure, not text of source
Error recovery
★ continue services in presence of syntactic errors
Incremental processing
★ effort of applying analysis, transformation, generation should be proportional to change in source
Separate compilation (analysis, transformation)
★ keep track of dependencies
![Page 16: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/16.jpg)
Holy Grail of Software Language Definition
Automatically derive efficient, scalable, incremental compiler + usable IDE from high-level, declarative language
definition
![Page 17: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/17.jpg)
Language Definition Tools
Parser generators
★ automatically generate parsers from grammars
★ LEX/YAC, Bison, ANTLR, ...
Meta-programming tools
★ DSLs for programming with programs as data
★ TXL, ASF+SDF, Stratego, JastAdd, RascalMPL, ...
IDE generators/frameworks
★ tools for construction of IDE plugins
★ IMP, TMF
★ Synthesizer Generator, Centaur, Lrc
![Page 18: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/18.jpg)
Language Workbenches
Integrated development environment for
★ language definition
★ application of language
Textual languages
★ ASF+SDF MetaEnvironment, XText, MontiCore, EMFText, Spoofax
Structure editors
★ MPS
Visual languages
★ MetaEdit+, DSL Tools, ...
![Page 19: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/19.jpg)
Spoofax/IMP
![Page 20: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/20.jpg)
The Spoofax/IMP Language Workbench
Syntax definition: SDF
★ declarative, modular syntax definition
Transformation, analysis, generation: Stratego
★ rewrite rules, strategies, dynamic rules
Editor services
★ domain-specific languages for configuration
Based on IMP framework by IBM Research
![Page 21: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/21.jpg)
Syntax Definition
![Page 22: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/22.jpg)
Syntax Definition
Parse Table Signature Pretty-Print Table
TransformParse Pretty-Print
entity User { name :: String pw :: Secret}def output(u : User) {
@Entityclass User { String _user; public User getUser() { return _user; }syntax definition is basis of language definition
![Page 23: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/23.jpg)
Lexical & Context-Free Syntax
![Page 24: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/24.jpg)
composed from
Structure of Sentences
![Page 25: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/25.jpg)
Context-Free Grammar
grammar production
symbol
DefinitionProperty*
{Stat “;”}*“entity”
regular expressionsort
![Page 26: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/26.jpg)
Lexical Syntax
character class
characters in lexical syntax not separated by layout
regular expression
![Page 27: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/27.jpg)
Syntax of Data Models
![Page 28: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/28.jpg)
RecognizingWell-Formed
Sentences
![Page 29: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/29.jpg)
Lexical Syntax: Identifiers & Literals
follow restriction: symbol may not be followed by character from this class: BlogEntry is one ID
reserved words
![Page 30: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/30.jpg)
Lexical Syntax: Strings
complement
escape
escape escape
![Page 31: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/31.jpg)
Lexical Syntax: Whitespace
LAYOUT? is inserted between symbols in CF productions
normalize
![Page 32: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/32.jpg)
Lexical Syntax: Comment
![Page 33: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/33.jpg)
Modular Syntax Definition
![Page 34: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/34.jpg)
Meta-Grammar
![Page 35: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/35.jpg)
Parsing & Abstract Syntax
building structured representation of sentence
![Page 36: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/36.jpg)
Constructor Annotations
![Page 37: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/37.jpg)
Terms to Represent Abstract Syntax
Entity(“Blog”, [Property(“name”,SimpleType(“String”)), Property(“author”, SimpleType(“User”))])
![Page 38: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/38.jpg)
Parsing
![Page 39: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/39.jpg)
Parsing
![Page 40: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/40.jpg)
Parsing
![Page 41: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/41.jpg)
Parsing
![Page 42: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/42.jpg)
Parsing
![Page 43: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/43.jpg)
Parsing in Spoofax
![Page 44: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/44.jpg)
Signatures
defining the structure of abstract syntax terms
![Page 45: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/45.jpg)
Syntax Definition
Parse Table Signature Pretty-Print Table
TransformParse Pretty-Print
entity User { name :: String pw :: Secret}def output(u : User) {
@Entityclass User { String _user; public User getUser() { return _user; }syntax definition is basis of language definition
![Page 46: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/46.jpg)
Signatures
declare arguments and types of constructorssignature is generated from grammar
![Page 47: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/47.jpg)
Disambiguation
![Page 48: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/48.jpg)
Arithmetic Expressions
Plus(Times(Var(“x”),Int(2)),Var(“z”))note: this style produces good abstract syntax
![Page 49: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/49.jpg)
![Page 50: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/50.jpg)
Associativity
![Page 51: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/51.jpg)
Priority
![Page 52: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/52.jpg)
Parsing after Disambiguation
![Page 53: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/53.jpg)
Brackets
![Page 54: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/54.jpg)
Syntax Definition
Parse Table Signature Pretty-Print Table
TransformParse Pretty-Print
entity User { name :: String pw :: Secret}def output(u : User) {
@Entityclass User { String _user; public User getUser() { return _user; }syntax definition is basis of language definition
![Page 55: Model-Driven Software Development - Language Workbenches & Syntax Definition](https://reader034.vdocuments.us/reader034/viewer/2022042814/554f5e6bb4c905c8088b4848/html5/thumbnails/55.jpg)
Schedule
Lab this week
★ Design 1: deadline is April 1
★ Design 2: what DSL will you design?
Cases
★ Case 2: web abstractions
★ Deadline Case 2: April 8
Next
★ Lecture 7: editor services & basic code generation