kodept-parse 0.3.0

Simple compiler with dependent types support in mind
Documentation
use nom::branch::alt;
use nom::Parser;
use nom_supreme::ParserExt;

use kodept_core::structure::rlt;
use kodept_core::structure::rlt::new_types::TypeName;

use crate::lexer::{Identifier::Type, Token};
use crate::nom::parser::macros::{function, match_token};
use crate::nom::parser::ParseResult;
use crate::nom::parser::utils::{comma_separated0, paren_enclosed};
use crate::token_stream::TokenStream;

pub fn reference(input: TokenStream) -> ParseResult<TypeName> {
    match_token!(Token::Identifier(Type(_)))
        .context(function!())
        .map(|it| it.span.into())
        .parse(input)
}

fn tuple(input: TokenStream) -> ParseResult<rlt::Type> {
    paren_enclosed(comma_separated0(grammar))
        .context(function!())
        .map(|it| rlt::Type::Tuple(it.into()))
        .parse(input)
}

pub fn grammar(input: TokenStream) -> ParseResult<rlt::Type> {
    alt((reference.map(rlt::Type::Reference), tuple))
        .context(function!())
        .parse(input)
}