sv_parser_syntaxtree/expressions/
numbers.rs

1use crate::*;
2
3// -----------------------------------------------------------------------------
4
5#[derive(Clone, Debug, PartialEq, Node)]
6pub enum Number {
7    IntegralNumber(Box<IntegralNumber>),
8    RealNumber(Box<RealNumber>),
9}
10
11#[derive(Clone, Debug, PartialEq, Node)]
12pub enum IntegralNumber {
13    DecimalNumber(Box<DecimalNumber>),
14    OctalNumber(Box<OctalNumber>),
15    BinaryNumber(Box<BinaryNumber>),
16    HexNumber(Box<HexNumber>),
17}
18
19#[derive(Clone, Debug, PartialEq, Node)]
20pub enum DecimalNumber {
21    UnsignedNumber(Box<UnsignedNumber>),
22    BaseUnsigned(Box<DecimalNumberBaseUnsigned>),
23    BaseXNumber(Box<DecimalNumberBaseXNumber>),
24    BaseZNumber(Box<DecimalNumberBaseZNumber>),
25}
26
27#[derive(Clone, Debug, PartialEq, Node)]
28pub struct DecimalNumberBaseUnsigned {
29    pub nodes: (Option<Size>, DecimalBase, UnsignedNumber),
30}
31
32#[derive(Clone, Debug, PartialEq, Node)]
33pub struct DecimalNumberBaseXNumber {
34    pub nodes: (Option<Size>, DecimalBase, XNumber),
35}
36
37#[derive(Clone, Debug, PartialEq, Node)]
38pub struct DecimalNumberBaseZNumber {
39    pub nodes: (Option<Size>, DecimalBase, ZNumber),
40}
41
42#[derive(Clone, Debug, PartialEq, Node)]
43pub struct BinaryNumber {
44    pub nodes: (Option<Size>, BinaryBase, BinaryValue),
45}
46
47#[derive(Clone, Debug, PartialEq, Node)]
48pub struct OctalNumber {
49    pub nodes: (Option<Size>, OctalBase, OctalValue),
50}
51
52#[derive(Clone, Debug, PartialEq, Node)]
53pub struct HexNumber {
54    pub nodes: (Option<Size>, HexBase, HexValue),
55}
56
57#[derive(Clone, Debug, PartialEq, Node)]
58pub enum Sign {
59    Plus(Box<Symbol>),
60    Minus(Box<Symbol>),
61}
62
63#[derive(Clone, Debug, PartialEq, Node)]
64pub struct Size {
65    pub nodes: (NonZeroUnsignedNumber,),
66}
67
68#[derive(Clone, Debug, PartialEq, Node)]
69pub struct NonZeroUnsignedNumber {
70    pub nodes: (Locate, Vec<WhiteSpace>),
71}
72
73#[derive(Clone, Debug, PartialEq, Node)]
74pub enum RealNumber {
75    FixedPointNumber(Box<FixedPointNumber>),
76    Floating(Box<RealNumberFloating>),
77}
78
79#[derive(Clone, Debug, PartialEq, Node)]
80pub struct RealNumberFloating {
81    pub nodes: (
82        UnsignedNumber,
83        Option<(Symbol, UnsignedNumber)>,
84        Exp,
85        Option<Sign>,
86        UnsignedNumber,
87    ),
88}
89
90#[derive(Clone, Debug, PartialEq, Node)]
91pub struct FixedPointNumber {
92    pub nodes: (UnsignedNumber, Symbol, UnsignedNumber),
93}
94
95#[derive(Clone, Debug, PartialEq, Node)]
96pub struct Exp {
97    pub nodes: (Symbol,),
98}
99
100#[derive(Clone, Debug, PartialEq, Node)]
101pub struct UnsignedNumber {
102    pub nodes: (Locate, Vec<WhiteSpace>),
103}
104
105#[derive(Clone, Debug, PartialEq, Node)]
106pub struct BinaryValue {
107    pub nodes: (Locate, Vec<WhiteSpace>),
108}
109
110#[derive(Clone, Debug, PartialEq, Node)]
111pub struct OctalValue {
112    pub nodes: (Locate, Vec<WhiteSpace>),
113}
114
115#[derive(Clone, Debug, PartialEq, Node)]
116pub struct HexValue {
117    pub nodes: (Locate, Vec<WhiteSpace>),
118}
119
120#[derive(Clone, Debug, PartialEq, Node)]
121pub struct DecimalBase {
122    pub nodes: (Locate, Vec<WhiteSpace>),
123}
124
125#[derive(Clone, Debug, PartialEq, Node)]
126pub struct BinaryBase {
127    pub nodes: (Locate, Vec<WhiteSpace>),
128}
129
130#[derive(Clone, Debug, PartialEq, Node)]
131pub struct OctalBase {
132    pub nodes: (Locate, Vec<WhiteSpace>),
133}
134
135#[derive(Clone, Debug, PartialEq, Node)]
136pub struct HexBase {
137    pub nodes: (Locate, Vec<WhiteSpace>),
138}
139
140#[derive(Clone, Debug, PartialEq, Node)]
141pub struct XNumber {
142    pub nodes: (Locate, Vec<WhiteSpace>),
143}
144
145#[derive(Clone, Debug, PartialEq, Node)]
146pub struct ZNumber {
147    pub nodes: (Locate, Vec<WhiteSpace>),
148}
149
150#[derive(Clone, Debug, PartialEq, Node)]
151pub struct UnbasedUnsizedLiteral {
152    pub nodes: (Symbol,),
153}