Model-Driven Software Development - Language Workbenches & Syntax Definition

55
Language Workbenches & Syntax Definition Course IN4308 Master Computer Science Delft University of Technology Eelco Visser http://eelcovisser.org Lecture 6

description

Language Workbenches & Syntax Definition

Transcript of Model-Driven Software Development - Language Workbenches & Syntax Definition

Page 1: Model-Driven Software Development - Language Workbenches & Syntax Definition

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

Part IIModeling Languages

Page 3: Model-Driven Software Development - Language Workbenches & Syntax Definition

Language Workbenches

Lecture 6

Page 4: Model-Driven Software Development - Language Workbenches & Syntax Definition

Language Modeling

Lectures 6-7

Page 5: Model-Driven Software Development - Language Workbenches & Syntax Definition

Transformation, Generation, Analysis

Lectures 8-10

Page 6: Model-Driven Software Development - Language Workbenches & Syntax Definition

Customization

Lecture 10

Codecustomize

Model

generate

Page 7: Model-Driven Software Development - Language Workbenches & Syntax Definition

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

Language Workbenches

Page 9: Model-Driven Software Development - Language Workbenches & Syntax Definition

Model

Code

AST

core

Errorsparse check

desugar

generate

Traditional Compiler Architecture

Page 10: Model-Driven Software Development - Language Workbenches & Syntax Definition

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

Integrated Development Environments

extended requirements for language definition

Page 12: Model-Driven Software Development - Language Workbenches & Syntax Definition

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

Demonstration: NWL in Spoofax

Page 14: Model-Driven Software Development - Language Workbenches & Syntax Definition

Editor

Code

AST

core

IntegratedDevelopmentEnvironment

feedback

parse

Page 15: Model-Driven Software Development - Language Workbenches & Syntax Definition

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

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

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

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

Spoofax/IMP

Page 20: Model-Driven Software Development - Language Workbenches & Syntax Definition

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

Syntax Definition

Page 22: Model-Driven Software Development - Language Workbenches & Syntax Definition

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

Lexical & Context-Free Syntax

Page 24: Model-Driven Software Development - Language Workbenches & Syntax Definition

composed from

Structure of Sentences

Page 25: Model-Driven Software Development - Language Workbenches & Syntax Definition

Context-Free Grammar

grammar production

symbol

DefinitionProperty*

{Stat “;”}*“entity”

regular expressionsort

Page 26: Model-Driven Software Development - Language Workbenches & Syntax Definition

Lexical Syntax

character class

characters in lexical syntax not separated by layout

regular expression

Page 27: Model-Driven Software Development - Language Workbenches & Syntax Definition

Syntax of Data Models

Page 28: Model-Driven Software Development - Language Workbenches & Syntax Definition

RecognizingWell-Formed

Sentences

Page 29: Model-Driven Software Development - Language Workbenches & Syntax Definition

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

Lexical Syntax: Strings

complement

escape

escape escape

Page 31: Model-Driven Software Development - Language Workbenches & Syntax Definition

Lexical Syntax: Whitespace

LAYOUT? is inserted between symbols in CF productions

normalize

Page 32: Model-Driven Software Development - Language Workbenches & Syntax Definition

Lexical Syntax: Comment

Page 33: Model-Driven Software Development - Language Workbenches & Syntax Definition

Modular Syntax Definition

Page 34: Model-Driven Software Development - Language Workbenches & Syntax Definition

Meta-Grammar

Page 35: Model-Driven Software Development - Language Workbenches & Syntax Definition

Parsing & Abstract Syntax

building structured representation of sentence

Page 36: Model-Driven Software Development - Language Workbenches & Syntax Definition

Constructor Annotations

Page 37: Model-Driven Software Development - Language Workbenches & Syntax Definition

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

Parsing

Page 39: Model-Driven Software Development - Language Workbenches & Syntax Definition

Parsing

Page 40: Model-Driven Software Development - Language Workbenches & Syntax Definition

Parsing

Page 41: Model-Driven Software Development - Language Workbenches & Syntax Definition

Parsing

Page 42: Model-Driven Software Development - Language Workbenches & Syntax Definition

Parsing

Page 43: Model-Driven Software Development - Language Workbenches & Syntax Definition

Parsing in Spoofax

Page 44: Model-Driven Software Development - Language Workbenches & Syntax Definition

Signatures

defining the structure of abstract syntax terms

Page 45: Model-Driven Software Development - Language Workbenches & Syntax Definition

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

Signatures

declare arguments and types of constructorssignature is generated from grammar

Page 47: Model-Driven Software Development - Language Workbenches & Syntax Definition

Disambiguation

Page 48: Model-Driven Software Development - Language Workbenches & Syntax Definition

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
Page 50: Model-Driven Software Development - Language Workbenches & Syntax Definition

Associativity

Page 51: Model-Driven Software Development - Language Workbenches & Syntax Definition

Priority

Page 52: Model-Driven Software Development - Language Workbenches & Syntax Definition

Parsing after Disambiguation

Page 53: Model-Driven Software Development - Language Workbenches & Syntax Definition

Brackets

Page 54: Model-Driven Software Development - Language Workbenches & Syntax Definition

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

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