vcpu 0.2.0

A virtual cpu, modeled after the 6502
Documentation
#[enumflags2::bitflags]
#[repr(u64)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Symbol {
  // Single-character
  LeftParenthesis,
  RightParenthesis,
  LeftSquareBracket,
  RightSquareBracket,
  LeftCurlyBracket,
  RightCurlyBracket,
  Hashtag,
  Comma,
  Period,
  Colon,
  Semicolon,
  QuotationMark,
  Apostrophe,

  // One or two characters
  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(),
    }
  }
}