Skip to main content

scarf_syntax/expressions/
numbers.rs

1// =======================================================================
2// numbers.rs
3// =======================================================================
4// CST Nodes from 1800-2023 A.8.7
5use crate::*;
6
7#[derive(Clone, Debug, PartialEq)]
8pub enum Number<'a> {
9    Integral(Box<IntegralNumber<'a>>),
10    Real(Box<RealNumber<'a>>),
11}
12
13#[derive(Clone, Debug, PartialEq)]
14pub enum IntegralNumber<'a> {
15    Decimal(Box<DecimalNumber<'a>>),
16    Octal(Box<OctalNumber<'a>>),
17    Binary(Box<BinaryNumber<'a>>),
18    Hex(Box<HexNumber<'a>>),
19}
20
21#[derive(Clone, Debug, PartialEq)]
22pub enum DecimalNumber<'a> {
23    Sized(Box<(&'a str, Metadata<'a>)>),
24    Unsized(Box<UnsignedNumber<'a>>),
25}
26
27#[derive(Clone, Debug, PartialEq)]
28pub struct BinaryNumber<'a>(pub &'a str, pub Metadata<'a>);
29
30#[derive(Clone, Debug, PartialEq)]
31pub struct OctalNumber<'a>(pub &'a str, pub Metadata<'a>);
32
33#[derive(Clone, Debug, PartialEq)]
34pub struct HexNumber<'a>(pub &'a str, pub Metadata<'a>);
35
36#[derive(Clone, Debug, PartialEq)]
37pub enum RealNumber<'a> {
38    FixedPoint(Box<FixedPointNumber<'a>>),
39    Scientific(Box<ScientificNumber<'a>>),
40}
41
42#[derive(Clone, Debug, PartialEq)]
43pub struct FixedPointNumber<'a>(pub &'a str, pub Metadata<'a>);
44
45#[derive(Clone, Debug, PartialEq)]
46pub struct ScientificNumber<'a>(pub &'a str, pub Metadata<'a>);
47
48#[derive(Clone, Debug, PartialEq)]
49pub struct UnsignedNumber<'a>(pub &'a str, pub Metadata<'a>);
50
51#[derive(Clone, Debug, PartialEq)]
52pub struct UnbasedUnsizedLiteral<'a>(pub &'a str, pub Metadata<'a>);