1 个稳定版本
使用旧 Rust 2015
1.0.0 | 2018年4月8日 |
---|---|
0.1.0 |
|
#1102 在 编程语言
在 dqcsim-openqasm 中使用
35KB
626 行
QASM-rust
使用 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