Skip to content

Repository files navigation

QASM-rust

Build Statuscrates icon

An OPENQASM 2.0 parser written in Rust 🌵

Features

  • Passes the official OpenQASM conformance test suite
  • As described in the OpenQASM specification
  • Get tokens for a given source file
  • Resolve include statements
  • Remove comments
  • Build Abstract Syntax Tree of a list of tokens

Usage

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.

test.qasm

OPENQASM 2.0;
// Clifford gate: Hadamardgateh a { u2(0,pi) a; }
qreg q[2];
creg c[1];
h q[0];
CX q[0], q[1];
measure q[1] -> c[1];

main.rs

externcrate qasm;use std::env;use std::fs::File;use std::io::prelude::*;use qasm::{process, lex, parse};fnmain(){let cwd = env::current_dir().unwrap();letmut source = String::new();letmut 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);letmut tokens = lex(&processed_source);let ast = parse(&mut tokens);println!("{:?}", ast);}

Output

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))])

License

MIT

About

An IBM OpenQASM 2.0 Parser Written In Rust

Topics

Resources

Stars

28 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages