Skip to main content

mical_cli_syntax/
token.rs

1#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
2pub struct Token {
3    pub kind: TokenKind,
4    pub len: u32,
5}
6
7const _: () = {
8    assert!(size_of::<Token>() == size_of::<u64>());
9    assert!(size_of::<Token>() == size_of::<Option<Token>>());
10};
11
12pub trait TokenStream<'src>: Iterator<Item = Token> {
13    fn source(&self) -> &'src str;
14}
15
16#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
17pub enum TokenKind {
18    Word,
19    Numeral { radix: Radix, is_empty: bool },
20    True,
21    False,
22    String { is_terminated: bool, quote: Quote },
23
24    Tab,     // 0x09
25    Newline, // 0x0A
26    Space,   // 0x20
27
28    CloseBrace, // }
29    Greater,    // >
30    Minus,      // -
31    OpenBrace,  // {
32    Pipe,       // |
33    Plus,       // +
34    Sharp,      // #
35}
36
37#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
38pub enum Radix {
39    Binary = 2,
40    Octal = 8,
41    Decimal = 10,
42    Hexadecimal = 16,
43}
44
45#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
46pub enum Quote {
47    Single,
48    Double,
49}