There's no life without trees
● Extending IDEs
● External DSLs
● Internal DSLs in modern languages
● Groovy AST transformations
● Scala macros
● Lisp, Clojure macros
● Lombok
Parsing is the bottleneck
… of language expressiveness
● Limits the possible syntaxes
● Allows only one editable code visualization
● Complicates combining languages
Aspects of language definition
● Abstract syntax
● Concrete syntax (editor)
● Static semantics
● Constraints
● Type-system
● Dataflow
● Execution semantics / Generator
● IDE support