/Yoakke

A collection of libraries for implementing compilers in .NET.

Primary LanguageC#Apache License 2.0Apache-2.0

The Yoakke Compiler Infrastructure

Language- and Compiler development tools in .NET.

All Contributors

What is Yoakke?

Yoakke is a collection of libraries aimed at compiler- and language developers to help them in their development. Most common tasks - like lexing and parsing - are completely automated, but extensibility is kept in mind at every step. All components let you roll your custom solution, but are capable enough to fit most cases by default.

Status warning

Yoakke is still early in development. You can play around with the libraries, but there may be bugs or missing features. Please open an issue if you find a bug, or miss an important feature. All contributions are welcome!

If you want to try out the latest features, there are nightly releases on NuGet!

A note for Visual Studio users

If you are experiencing build issues when using Visual Studio around Source Generators, please try enabling the option described here.

What components are there?

The most usable component is probably the syntax toolkit, called SynKit. There are many more components planned, see the next section for the roadmap.

Library roadmap

This is a list of the libraries that are planned for implementation, along with their status:

  • SynKit (πŸ†—): A syntax toolkit to cover most syntax needs
    • Lexer (πŸ†—)
    • Parser (πŸ†—)
    • Error reporting (πŸ†—)
  • Language Server Protocol (πŸ“)
  • Custom IR and VM (πŸ“)
  • Native backends (πŸ“)
  • C front-end (🚧)

Legend

  • Done: βœ…
  • Consider mostly done: πŸ†—
  • Work in progress: 🚧
  • Planned: πŸ“

Documentation

Documentation is very much work-in-progress, but you can always find the latest version in the Documentation folder. Feel free to open up Pull-Requests, if you see mistakes!

Developer documentation

Make sure to read our contributing document! Some developer documents about describing the projects is - hopefully - coming soon aswell.

Examples

Work in progress...

Sample projects

Work in progress...

Using Yoakke Badge

If you use Yoakke and would be willing to show it, here is a badge you can copy-paste into your readme:
Using Yoakke

<a href="https://github.com/LanguageDev/Yoakke" alt="Using Yoakke"><img src="https://raw.githubusercontent.com/LanguageDev/Yoakke/master/.github/resources/UsingYoakke.svg" title="Using Yoakke" alt="Using Yoakke"/></a>

Contributors ✨

Thanks goes to these wonderful people (emoji key):


LPeter1997

WhiteBlackGoose

Zachary Patten

Neko

Sang

lucyelle

PΓ©ter FΓ³nad

Andrii Kurdiumov

Friedrich von Never

Chris

Sam Harwell

Cole Tobin

Ikko Ashimine

This project follows the all-contributors specification. Contributions of any kind welcome!