#[enumflags2::bitflags]
#[repr(u64)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Symbol {
LeftParenthesis,
RightParenthesis,
LeftSquareBracket,
RightSquareBracket,
LeftCurlyBracket,
RightCurlyBracket,
Hashtag,
Comma,
Period,
Colon,
Semicolon,
QuotationMark,
Apostrophe,
Plus,
Minus,
Asterisk,
ForwardSlash,
ExclamationPoint,
LeftAngledBracket,
RightAngledBracket,
Equals,
DoubleEquals,
PlusEquals,
MinusEquals,
AsteriskEquals,
ForwardSlashEquals,
ExclamationPointEquals,
LeftAngledBracketEquals,
RightAngledBracketEquals,
RightArrow,
Ampersand,
DoubleAmpersand,
AmpersandEquals,
Pipe,
DoublePipe,
PipeEquals,
Caret,
CaretEquals,
Tilde,
TildeEquals,
Percent,
PercentEquals,
}
impl Symbol {
pub fn lexeme(&self) -> String {
match self {
Symbol::LeftParenthesis { .. } => "(".into(),
Symbol::RightParenthesis { .. } => ")".into(),
Symbol::LeftAngledBracket { .. } => "<".into(),
Symbol::RightAngledBracket { .. } => ">".into(),
Symbol::LeftSquareBracket { .. } => "[".into(),
Symbol::RightSquareBracket { .. } => "]".into(),
Symbol::LeftCurlyBracket { .. } => "{".into(),
Symbol::RightCurlyBracket { .. } => "}".into(),
Symbol::Hashtag { .. } => "#".into(),
Symbol::Comma { .. } => ",".into(),
Symbol::Period { .. } => ".".into(),
Symbol::Colon { .. } => ":".into(),
Symbol::Semicolon { .. } => ";".into(),
Symbol::QuotationMark { .. } => "\"".into(),
Symbol::Apostrophe { .. } => "\'".into(),
Symbol::Plus { .. } => "+".into(),
Symbol::Minus { .. } => "-".into(),
Symbol::Asterisk { .. } => "*".into(),
Symbol::ForwardSlash { .. } => "/".into(),
Symbol::ExclamationPoint { .. } => "!".into(),
Symbol::Equals { .. } => "=".into(),
Symbol::DoubleEquals { .. } => "==".into(),
Symbol::PlusEquals { .. } => "+=".into(),
Symbol::MinusEquals { .. } => "-=".into(),
Symbol::AsteriskEquals { .. } => "*=".into(),
Symbol::ForwardSlashEquals { .. } => "/=".into(),
Symbol::ExclamationPointEquals { .. } => "!=".into(),
Symbol::LeftAngledBracketEquals { .. } => "<=".into(),
Symbol::RightAngledBracketEquals { .. } => ">=".into(),
Symbol::RightArrow { .. } => "->".into(),
Symbol::Ampersand { .. } => "&".into(),
Symbol::DoubleAmpersand { .. } => "&&".into(),
Symbol::AmpersandEquals { .. } => "&=".into(),
Symbol::Pipe { .. } => "|".into(),
Symbol::DoublePipe { .. } => "||".into(),
Symbol::PipeEquals { .. } => "|=".into(),
Symbol::Caret { .. } => "^".into(),
Symbol::CaretEquals { .. } => "^=".into(),
Symbol::Tilde { .. } => "~".into(),
Symbol::TildeEquals { .. } => "~=".into(),
Symbol::Percent { .. } => "%".into(),
Symbol::PercentEquals { .. } => "%=".into(),
}
}
}