Language- and Compiler development tools in .NET.
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.
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 are experiencing build issues when using Visual Studio around Source Generators, please try enabling the option described here.
- Lexing: Lexers can be defined completely declaratively, as regular expression annotations - inspired by Logos - over token types. Do not worry, the regular expressions are compiled into Deterministic Finite Automatas, so the resulting code is a lot more efficient, than your average RegEx engine.
- Parsing: Parsers are defined using a BNF-like notation as annotations over methods that produce the syntax node for the appropriate rule - inspired by rply. The generated parser is a recursive descent one, but supports automatic transformation of direct left-recursion and precedence tables.
- Syntax trees: ASTs usually are a pain to implement because of all the crud that goes on with them in C#. With an annotation you can generate equality and hash implementations for AST nodes, or define visitors for them.
- Symbols: While lexical symbols are not too complex to implement, most compilers will need the same abstractions for it. Hence, this is also provided in a small library.
- Error reporting: Nice error messages on console are a pain. You have to align arrows, properly color text segments, number lines and so on. Fortunately, there is a component that provides you a nice fluent API - inspired by the beautiful codespan library - to generate a message, render it however you want to. You can even create a custom syntax-highlighter for source lines!
- Language Server: The Language Server Protocol defines a generic way for language tools to communicate with text editors. A library already implements the protocol, you just need to provide your own handler for events!
This is a list of the libraries that are planned for implementation, along with their status:
- Done: β
- Consider mostly done: π
- Work in progress: π§
- Planned: π
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!
Make sure to read our contributing document! Some developer documents about describing the projects is - hopefully - coming soon aswell.
Work in progress...
Work in progress...
If you use Yoakke and would be willing to show it, here is a badge you can copy-paste into your readme:
<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>
Thanks goes to these wonderful people (emoji key):
LPeter1997 π π€ π» π π§ π π |
WhiteBlackGoose π π |
Zachary Patten π¨ π |
Neko π€ π» |
Sang π» |
lucyelle π |
PΓ©ter FΓ³nad π π |
This project follows the all-contributors specification. Contributions of any kind welcome!