mical_cli_syntax/
token.rs1#[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, Newline, Space, CloseBrace, Greater, Minus, OpenBrace, Pipe, Plus, Sharp, }
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}