An OPENQASM 2.0 parser written in Rust 🌵
The usage of qasm
is fully given in the docs. A brief example is given here:
Here is an example that reads a file test.qasm
, processes it and then prints the AST.
```qasm OPENQASM 2.0;
// Clifford gate: Hadamard gate h a { u2(0,pi) a; }
qreg q[2]; creg c[1];
h q[0]; CX q[0], q[1];
measure q[1] -> c[1]; ```
```rust extern crate qasm;
use std::env; use std::fs::File; use std::io::prelude::*; use qasm::{process, lex, parse};
fn main() { let cwd = env::current_dir().unwrap(); let mut source = String::new();
let mut f = File::open("test.qasm").expect("cannot find source file 'test.qasm'");
f.read_to_string(&mut source).expect("couldn't read file 'test.qasm'");
let processed_source = process(&source, &cwd);
let mut tokens = lex(&processed_source);
let ast = parse(&mut tokens);
println!("{:?}", ast);
} ```
rust
Ok([
Gate("h", ["a"], [], [ApplyGate("u2", [Register("a")], [" 0 ", " pi "])]),
QReg("q", 2),
CReg("c", 1),
ApplyGate("h", [Qubit("q", 0)], []),
ApplyGate("CX", [Qubit("q", 0), Qubit("q", 1)], []),
Measure(Qubit("q", 1), Qubit("c", 1))
])
MIT