Skip to content

Milestone 3

VladD2 edited this page Apr 2, 2016 · 3 revisions

Parsing

  • Incremental parsing.
  • Parameterized rules. Parameters allow you to avoid duplication of rules. Parameters can be rule type or primitive type (string or int). Example: syntax Tag<Name> = "<" Name Attribute* ">" Content* "</" Name ">";
  • Rule local variables.
  • Semantic predicates - predicates which operate on Rule parameters and local rules variables. Semantic predicates and parameterized rules allows us to parse identation based grammars and other context-sensitive grammar (like "raw" string literals from C++ 11).

Transformation

  • DSL for code generation

Backends

  • Design and implement Backends API
  • Implement .Net Backend
    • Save metadata and code in format supported by backend
    • Load metadata from format supported by backend
    • Generation of executable images

Semantic analysis (typing)

  • Incremental reset and update dependent properties (DP). For example: re-evaluate DP of separate method and evaluate DP of methods in lazy manner.
  • Support serialization (on solution loading) & deserialization (on solution unloading) for AST, declarations and symbols (to prevent parsing on a project loading)

IDE support

  • Project reference
  • API for quickfix on compiler messages
  • Code formatting
  • Refactoring API
  • Rename refactoring
  • Miscellaneous
  • Expand/collapse selection
  • Complete statement

Project DSL

  • Design and implement Project DSL. This DSL should replace IProjectSupport (currently used in Nitra)

Languages support

  • Nemerle
  • C#

Distribution

  • Make deploying of nuget packages to nuget.org
  • Make VSIX for Nitra
  • Make Web site

Documentation

  • Write documentation for Mapping
  • Write documentation for Dependent Properties Language
  • Write documentation for AST/Declarations
  • Write documentation for IDE features

Bootstrapping

  • Replace Nemerle 1.0 code by Nemerle 2.0 code (powered by Nitra).
  • Move Nitra on Project DSL

Completing this phase means we can do the following:

  • Implement IDE support for Nitra
  • Implement Extensible C# and Nemerle 2.0 on Nitra
  • Make Nitra independent from Nemerle 1.0.
  • Move Nitra on .Net backend and Nemerle 2.0.
  • Release Nitra 1.0 (make distributive and deploying nuget packages)