Skip to main content

scarf_syntax/behavioral_statements/
randsequence.rs

1// =======================================================================
2// randsequence.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.6.12
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct RandsequenceStatement<'a>(
9    pub Metadata<'a>, // randsequence
10    pub Metadata<'a>, // (
11    pub Option<RsProductionIdentifier<'a>>,
12    pub Metadata<'a>, // )
13    pub RsProduction<'a>,
14    pub Vec<RsProduction<'a>>,
15    pub Metadata<'a>, // endsequence
16);
17
18#[derive(Clone, Debug, PartialEq)]
19pub struct RsProduction<'a>(
20    pub Option<DataTypeOrVoid<'a>>,
21    pub RsProductionIdentifier<'a>,
22    pub  Option<(
23        Metadata<'a>, // (
24        TfPortList<'a>,
25        Metadata<'a>, // )
26    )>,
27    pub Metadata<'a>, // :
28    pub RsRule<'a>,
29    pub  Vec<(
30        Metadata<'a>, // |
31        RsRule<'a>,
32    )>,
33    pub Metadata<'a>, // ;
34);
35
36#[derive(Clone, Debug, PartialEq)]
37pub struct RsRule<'a>(
38    pub RsProductionList<'a>,
39    pub  Option<(
40        Metadata<'a>, // :=
41        RsWeightSpecification<'a>,
42        Option<RsCodeBlock<'a>>,
43    )>,
44);
45
46#[derive(Clone, Debug, PartialEq)]
47pub enum RsProductionList<'a> {
48    Producers(Box<(RsProd<'a>, Vec<RsProd<'a>>)>),
49    Join(
50        Box<(
51            Metadata<'a>, // rand
52            Metadata<'a>, // join
53            Option<(
54                Metadata<'a>, // (
55                Expression<'a>,
56                Metadata<'a>, // )
57            )>,
58            RsProductionItem<'a>,
59            RsProductionItem<'a>,
60            Vec<RsProductionItem<'a>>,
61        )>,
62    ),
63}
64
65#[derive(Clone, Debug, PartialEq)]
66pub enum RsWeightSpecification<'a> {
67    Integral(Box<IntegralNumber<'a>>),
68    Ps(Box<PsIdentifier<'a>>),
69    Expression(
70        Box<(
71            Metadata<'a>, // (
72            Expression<'a>,
73            Metadata<'a>, // )
74        )>,
75    ),
76}
77
78#[derive(Clone, Debug, PartialEq)]
79pub struct RsCodeBlock<'a>(
80    pub Metadata<'a>, // {
81    pub Vec<DataDeclaration<'a>>,
82    pub Vec<StatementOrNull<'a>>,
83    pub Metadata<'a>, // }
84);
85
86#[derive(Clone, Debug, PartialEq)]
87pub enum RsProd<'a> {
88    Item(Box<RsProductionItem<'a>>),
89    CodeBlock(Box<RsCodeBlock<'a>>),
90    IfElse(Box<RsIfElse<'a>>),
91    Repeat(Box<RsRepeat<'a>>),
92    Case(Box<RsCase<'a>>),
93}
94
95#[derive(Clone, Debug, PartialEq)]
96pub struct RsProductionItem<'a>(
97    pub RsProductionIdentifier<'a>,
98    pub  Option<(
99        Metadata<'a>, // ,
100        ListOfArguments<'a>,
101        Metadata<'a>, // )
102    )>,
103);
104
105#[derive(Clone, Debug, PartialEq)]
106pub struct RsIfElse<'a>(
107    pub Metadata<'a>, // if
108    pub Metadata<'a>, // (
109    pub Expression<'a>,
110    pub Metadata<'a>, // )
111    pub RsProductionItem<'a>,
112    pub  Option<(
113        Metadata<'a>, // else
114        RsProductionItem<'a>,
115    )>,
116);
117
118#[derive(Clone, Debug, PartialEq)]
119pub struct RsRepeat<'a>(
120    pub Metadata<'a>, // repeat
121    pub Metadata<'a>, // (
122    pub Expression<'a>,
123    pub Metadata<'a>, // )
124    pub RsProductionItem<'a>,
125);
126
127#[derive(Clone, Debug, PartialEq)]
128pub struct RsCase<'a>(
129    pub Metadata<'a>, // case
130    pub Metadata<'a>, // (
131    pub CaseExpression<'a>,
132    pub Metadata<'a>, // )
133    pub RsCaseItem<'a>,
134    pub Vec<RsCaseItem<'a>>,
135    pub Metadata<'a>, // endcase
136);
137
138#[derive(Clone, Debug, PartialEq)]
139pub enum RsCaseItem<'a> {
140    Expression(
141        Box<(
142            CaseItemExpression<'a>,
143            Vec<(
144                Metadata<'a>, // ,
145                CaseItemExpression<'a>,
146            )>,
147            Metadata<'a>, // :
148            RsProductionItem<'a>,
149            Metadata<'a>, // ;
150        )>,
151    ),
152    Default(
153        Box<(
154            Metadata<'a>,         // default
155            Option<Metadata<'a>>, // :
156            RsProductionItem<'a>,
157            Metadata<'a>, // ;
158        )>,
159    ),
160}