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
- Definition of attribute grammars
- 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
- Motivating scenarios
- 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
- Sample refactorings
- 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
page revision: 2, last edited: 16 Jul 2013 13:44