1 个稳定版本

使用旧 Rust 2015

1.0.0 2018年4月8日
0.1.0 2018年4月8日

#1102编程语言


dqcsim-openqasm 中使用

MIT 许可证

35KB
626

QASM-rust

Build Status crates icon

使用 Rust 编写的 OPENQASM 2.0 解析器 🌵

功能

  • 通过官方 OpenQASM 一致性测试 套件
  • OpenQASM 规范 所述
  • 获取给定源文件的令牌
  • 解析包含语句
  • 移除注释
  • 构建令牌列表的抽象语法树

使用方法

qasm 的使用方法已在 文档 中全面介绍。这里提供了一个简要示例

以下是一个示例,它读取文件 test.qasm,处理它并打印 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);
}

输出

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

依赖项

~3.5MB
~71K SLoC