scarf_syntax/behavioral_statements/
randsequence.rs1use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub struct RandsequenceStatement<'a>(
9 pub Metadata<'a>, pub Metadata<'a>, pub Option<RsProductionIdentifier<'a>>,
12 pub Metadata<'a>, pub RsProduction<'a>,
14 pub Vec<RsProduction<'a>>,
15 pub Metadata<'a>, );
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>, TfPortList<'a>,
25 Metadata<'a>, )>,
27 pub Metadata<'a>, pub RsRule<'a>,
29 pub Vec<(
30 Metadata<'a>, RsRule<'a>,
32 )>,
33 pub Metadata<'a>, );
35
36#[derive(Clone, Debug, PartialEq)]
37pub struct RsRule<'a>(
38 pub RsProductionList<'a>,
39 pub Option<(
40 Metadata<'a>, 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>, Metadata<'a>, Option<(
54 Metadata<'a>, Expression<'a>,
56 Metadata<'a>, )>,
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>, Expression<'a>,
73 Metadata<'a>, )>,
75 ),
76}
77
78#[derive(Clone, Debug, PartialEq)]
79pub struct RsCodeBlock<'a>(
80 pub Metadata<'a>, pub Vec<DataDeclaration<'a>>,
82 pub Vec<StatementOrNull<'a>>,
83 pub Metadata<'a>, );
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>, ListOfArguments<'a>,
101 Metadata<'a>, )>,
103);
104
105#[derive(Clone, Debug, PartialEq)]
106pub struct RsIfElse<'a>(
107 pub Metadata<'a>, pub Metadata<'a>, pub Expression<'a>,
110 pub Metadata<'a>, pub RsProductionItem<'a>,
112 pub Option<(
113 Metadata<'a>, RsProductionItem<'a>,
115 )>,
116);
117
118#[derive(Clone, Debug, PartialEq)]
119pub struct RsRepeat<'a>(
120 pub Metadata<'a>, pub Metadata<'a>, pub Expression<'a>,
123 pub Metadata<'a>, pub RsProductionItem<'a>,
125);
126
127#[derive(Clone, Debug, PartialEq)]
128pub struct RsCase<'a>(
129 pub Metadata<'a>, pub Metadata<'a>, pub CaseExpression<'a>,
132 pub Metadata<'a>, pub RsCaseItem<'a>,
134 pub Vec<RsCaseItem<'a>>,
135 pub Metadata<'a>, );
137
138#[derive(Clone, Debug, PartialEq)]
139pub enum RsCaseItem<'a> {
140 Expression(
141 Box<(
142 CaseItemExpression<'a>,
143 Vec<(
144 Metadata<'a>, CaseItemExpression<'a>,
146 )>,
147 Metadata<'a>, RsProductionItem<'a>,
149 Metadata<'a>, )>,
151 ),
152 Default(
153 Box<(
154 Metadata<'a>, Option<Metadata<'a>>, RsProductionItem<'a>,
157 Metadata<'a>, )>,
159 ),
160}