Concepts covered by the SLE course Edition 2013

We group concepts by the names of the lectures. We distinguish abstract versus language- and technology-specific concepts. Abstract concepts are more likely to be covered by the lectures. Language- and technology-specific concepts may be covered both by lectures and labs.

Grammars and parsing

  • Abstract concepts
    • Definition of context-free grammars
    • The notion of a language generated by a grammar
    • Application contexts ("megamodels") for parsing
    • Non-deterministic top-down parsing algorithm
    • Non-deterministic bottom-up parsing algorithm
    • Left-recursion removal
    • The LL(1) grammar class
  • Language- and technology-specific concepts
    • Some grammar classes supported by ANTLR
    • Semantic actions and synthesized attributes with ANTLR
    • Parsing with Rascal

Language processing

  • Abstract concepts
    • Concrete versus abstract syntax
    • Acceptors versus parsers versus pretty printers
    • Type system versus type checking
    • Interpreter versus compiler
    • Options for target languages
  • Language- and technology-specific concepts
    • Encoding of abstract syntax in Haskell
    • Parser combinators in Haskell
    • Interpreters and compilers in Rascal

Attribute grammars

  • Abstract concepts
    • Definition of attribute grammars
      • Attributes (synthesized and inherited)
      • Semantic rules
    • Binary to decimal number conversion
    • Interpretation of attribute grammars as equational systems
    • S-attributed grammars
    • Definite Clause Grammars
    • The RepMin problem
  • Language- and technology-specific concepts
    • S-attributed grammars in ANTLR
    • Encoding of attribute grammars in Prolog
    • Encoding of attribute grammars with Constraint Logic Programming
    • Encoding of attribute grammars in Haskell
    • Attribute grammars in the JastAdd system
    • Flow analysis in Rascal

Rewriting & strategies

  • Abstract concepts
    • Motivating scenarios
      • Yaccification and deyaccification
      • Refactoring, e.g., extract method
      • Schema normalization
      • Primitive to tail recursion
      • Tail recursion to iteration
      • Loop-invariant code motion
    • Equations versus rewrite rules
    • Equational reasoning versus rewriting
    • Nontermination
    • Normalization strategies
      • Top down, one time
      • Bottom up, one time
    • Traversal schemes
    • Deep versus one-layer traversal
  • Language- and technology-specific concepts
    • Rewriting in Prolog
    • Meta-programming for traversal schemes in Prolog
    • Rewriting strategies in Rascal
    • Scrap your boilerplate in Haskell
    • Rewriting in JastAdd

Automated refactoring

  • Abstract concepts
    • Sample refactorings
      • Inlining versus extraction in functional programs
      • Inlining versus extraction in OO programs
    • Genericity of refactorings (across language)
    • General steps for extraction refactoring
    • Free variable analysis
  • Language- and technology-specific concepts
    • Implementation of inlining or another refactoring in Haskell
    • Implementation of extraction or another refactoring in Rascal

Code generation

  • Abstract concepts
    • Frontend versus backend
    • Intermediate representation
      • Postfix representation
      • Three-address representation
    • Syntax-directed translation
    • Symbol tables
    • Portable code machines
    • Classes of compiler optimizations
    • Static single assignment
    • Control-flow graphs
  • Language- and technology-specific concepts
    • Code generation with LLVM
    • Bytecode engineering with ASM

Grammar-based testing

  • Abstract concepts
    • Grammar-based testing versus other forms of testing
    • Principle forms of testing grammarware
    • Coverage criteria
      • Rule coverage
      • Branch coverage
      • Context-dependent rule/branch coverage
    • Positive versus negative test cases
    • Many small samples versus fewer big samples
    • Combinatorial coverage and control thereof
    • Generation of statically correct test data
    • Test-based grammar comparison
  • Language- and technology-specific concepts
    • Automated testing with Randoop
    • Implementation of combinatorial test-data generation

Domain-specific languages

  • Abstract concepts
    • General-purpose versus domain-specific language
    • Pros and cons of DSLs
    • Implementations styles for DSLs
      • External DSL
      • Internal DSL
    • Heterogeneous versus homogenous embedding
    • Patterns of internal DSLs
    • Quasiquotation
  • Language- and technology-specific concepts
    • Embedded DSLs in Helvetia
    • Fluent APIs in Java
    • DSLs with SugarJ
    • DSLs with SugarHaskell
    • DSLs with Haskell's quasiquotation
    • DSLs with Haskell's TemplateHaskell
    • DSLs with Converge

Language design and evolution

  • Abstract concepts
    • Semantic domains
    • Deep versus shallow embedding
    • Extensibility of embedding
    • Syntax- versus semantics-driven desgin
    • Domain identification and decomposition
    • Syntax design
  • Language- and technology-specific concepts
    • Deep embedding in Haskell
    • Shallow embedding in Haskell

Linguistic architecture

  • Abstract concepts
    • T-diagrams
    • Mechanics of model transformations
    • Fundamental relationships
      • element of
      • representation of
      • conforms to
      • transforms to
    • Coupled transformations
    • Grammar convergence
  • Language- and technology-specific concepts
    • Coupled XML transformation in Java/DOM
    • Coupled database transformation in Rascal
    • Megamodeling with MegaL