kotlin_parser/parse/expression/
mod.rs1use 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}