Implement Inko's parser in Inko
Summary
The standard library should provide a parser for Inko's source code. This allows the compiler to use this parser, as well as allowing other future code to make use of it.
Motivation
Inko's compiler will be written in Inko itself, requiring us to provide a parser in the standard library.
Implementation
The parser will be a hand-written LL(1) recursive descent parser, just like the Ruby
compiler uses. The module this code is located in will be std::compiler::parser
.
The various AST types will be defined in the std::compiler::ast
module, since it
is expected that these types will take up quite a few lines of code.
As part of this work, we need to add syntax support for trait bounds, and drop
support for method bounds. This means that def foo ... where T: X
is not supported
by this parser.
Drawbacks
Due to the lack of optimisations, the Inko parser will likely be quite a bit slower compared to the Ruby parser. This is something we can/will optimise in the future.