scarf_parser/parser/declarations/
declaration_assignments.rs

1// =======================================================================
2// declaration_assignments.rs
3// =======================================================================
4// Parsing for 1800-2023 A.2.4
5
6use crate::*;
7use chumsky::prelude::*;
8use scarf_syntax::*;
9
10pub fn param_assignment_parser<'a, I>() -> impl Parser<'a, I, ParamAssignment<'a>, ParserError<'a>>
11where
12    I: ValueInput<'a, Token = Token<'a>, Span = ParserSpan>,
13{
14    parameter_identifier_parser()
15        .then(
16            variable_dimension_parser()
17                .repeated()
18                .collect::<Vec<VariableDimension<'a>>>(),
19        )
20        .then(
21            token(Token::Eq)
22                .then(constant_param_expression_parser())
23                .or_not(),
24        )
25        .map(|((a, b), c)| ParamAssignment(a, b, c))
26}
27
28pub fn type_assignment_parser<'a, I>() -> impl Parser<'a, I, TypeAssignment<'a>, ParserError<'a>>
29where
30    I: ValueInput<'a, Token = Token<'a>, Span = ParserSpan>,
31{
32    type_identifier_parser()
33        .then(
34            token(Token::Eq)
35                .then(data_type_or_implicit_parser())
36                .or_not(),
37        )
38        .map(|(a, b)| TypeAssignment(a, b))
39}