rusty_lr_core/
token.rs

1use std::fmt::Debug;
2use std::fmt::Display;
3use std::hash::Hash;
4
5/// Token represents a terminal or non-terminal symbol in the grammar.
6#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
7pub enum Token<Term, NonTerm> {
8    Term(Term),
9    NonTerm(NonTerm),
10}
11impl<Term: Display, NonTerm: Display> Display for Token<Term, NonTerm> {
12    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
13        match self {
14            Token::Term(term) => write!(f, "{}", term),
15            Token::NonTerm(nonterm) => write!(f, "{}", nonterm),
16        }
17    }
18}
19impl<Term: Debug, NonTerm: Debug> Debug for Token<Term, NonTerm> {
20    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
21        match self {
22            Token::Term(term) => write!(f, "{:?}", term),
23            Token::NonTerm(nonterm) => write!(f, "{:?}", nonterm),
24        }
25    }
26}