#[derive(Debug, PartialEq, Clone)]
pub enum Token {
Illegal,
EndOfFile,
Real(f32),
NNInteger(i32),
Id(String),
OpenQASM,
Semicolon,
Comma,
LParen,
LSParen,
LCParen,
RParen,
RSParen,
RCParen,
Arrow,
Equals,
Plus,
Minus,
Times,
Divide,
Power,
Sin,
Cos,
Tan,
Exp,
Ln,
Sqrt,
Pi,
QReg,
CReg,
Barrier,
Gate,
Measure,
Reset,
Include,
Opaque,
If,
}
impl Default for Token {
fn default() -> Token {
Token::Illegal
}
}
pub fn lookup_ident(ident: &str) -> Token {
match ident {
"qreg" => Token::QReg,
"creg" => Token::CReg,
"barrier" => Token::Barrier,
"gate" => Token::Gate,
"measure" => Token::Measure,
"reset" => Token::Reset,
"include" => Token::Include,
"opaque" => Token::Opaque,
"if" => Token::If,
"sin" => Token::Sin,
"cos" => Token::Cos,
"tan" => Token::Tan,
"exp" => Token::Exp,
"ln" => Token::Ln,
"sqrt" => Token::Sqrt,
"pi" => Token::Pi,
"OPENQASM" => Token::OpenQASM,
_ => Token::Id(ident.into()),
}
}
#[test]
fn lookup_ident_test() {
assert_eq!(lookup_ident("opaque"), Token::Opaque);
}