kotlin_parser/parse/expression/
mod.rs

1use crate::ast::{Expression, Statement};
2use chumsky::prelude::*;
3
4pub mod array_access;
5pub mod break_expr;
6pub mod call;
7pub mod continue_expr;
8pub mod for_expr;
9pub mod if_expr;
10pub mod label;
11pub mod literal;
12pub mod object_expr;
13pub mod path;
14pub mod try_expr;
15pub mod when_expr;
16pub mod while_expr;
17pub mod return_expr;
18
19pub fn expression_parser<'a>(
20    stmt_parser: impl Parser<char, Statement, Error = Simple<char>> + Clone + 'a,
21) -> impl Parser<char, Expression, Error = Simple<char>> + 'a {
22    recursive(|expr| {
23        choice((
24            break_expr::break_expr_parser(),
25            continue_expr::continue_expr_parser(),
26            for_expr::for_expr_parser(stmt_parser.clone(), expr.clone()),
27            if_expr::if_expr_parser(stmt_parser.clone(), expr.clone()),
28            try_expr::try_expr_parser(stmt_parser.clone(), expr.clone()),
29            when_expr::when_expr_parser(stmt_parser.clone(), expr.clone()),
30            while_expr::while_expr_parser(stmt_parser.clone(), expr.clone()),
31            array_access::bracket_expr_parser(stmt_parser.clone()),
32            call::call_parser(stmt_parser.clone(), expr.clone()),
33            object_expr::object_expr_parser(stmt_parser.clone(), expr.clone()),
34            return_expr::return_expr_parser(stmt_parser.clone()),
35        ))
36        .padded()
37        .map(Expression::from)
38    })
39}