Skip to main content

scarf_syntax/behavioral_statements/
conditional_statements.rs

1// =======================================================================
2// conditional_statements.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.6.6
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct ConditionalStatement<'a>(
9    pub Option<UniquePriority<'a>>,
10    pub Metadata<'a>, // if
11    pub Metadata<'a>, // (
12    pub CondPredicate<'a>,
13    pub Metadata<'a>, // )
14    pub StatementOrNull<'a>,
15    pub  Vec<(
16        Metadata<'a>, // else
17        Metadata<'a>, // if
18        Metadata<'a>, // (
19        CondPredicate<'a>,
20        Metadata<'a>, // )
21        StatementOrNull<'a>,
22    )>,
23    pub  Option<(
24        Metadata<'a>, // else
25        StatementOrNull<'a>,
26    )>,
27);
28
29#[derive(Clone, Debug, PartialEq)]
30pub enum UniquePriority<'a> {
31    Unique(Metadata<'a>),
32    Unique0(Metadata<'a>),
33    Priority(Metadata<'a>),
34}
35
36#[derive(Clone, Debug, PartialEq)]
37pub struct CondPredicate<'a>(
38    pub ExpressionOrCondPattern<'a>,
39    pub  Vec<(
40        Metadata<'a>, // &&&
41        ExpressionOrCondPattern<'a>,
42    )>,
43);
44
45#[derive(Clone, Debug, PartialEq)]
46pub enum ExpressionOrCondPattern<'a> {
47    Expression(Box<Expression<'a>>),
48    CondPattern(Box<CondPattern<'a>>),
49}
50
51#[derive(Clone, Debug, PartialEq)]
52pub struct CondPattern<'a>(
53    pub Expression<'a>,
54    pub Metadata<'a>, // matches
55    pub Pattern<'a>,
56);