All Projects → libtangle → qasm-rust

libtangle / qasm-rust

Licence: MIT license
An IBM OpenQASM 2.0 Parser Written In Rust

Programming Languages

rust
11053 projects
OpenQASM
18 projects
pascal
1382 projects

Projects that are alternatives of or similar to qasm-rust

ocparse
LALR grammar based Cypher parser using the grammar rules from the openCypher project.
Stars: ✭ 19 (-9.52%)
Mutual labels:  lalr-parser
qisjob
Qiskit Job Control
Stars: ✭ 24 (+14.29%)
Mutual labels:  qasm
LR-Parser
LR Parser (LR(0), SLR(1), CLR(1) and LALR(1))
Stars: ✭ 40 (+90.48%)
Mutual labels:  lalr-parser

QASM-rust

Build Status crates 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: 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];

main.rs

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);
}

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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].