3 个版本

0.1.3 2022年2月26日
0.1.2 2022年2月21日
0.1.1 2022年2月17日
0.1.0 2022年2月17日

#2261 in 解析器实现

Download history 24/week @ 2024-03-13 13/week @ 2024-03-20 153/week @ 2024-03-27 39/week @ 2024-04-03 6/week @ 2024-04-10 132/week @ 2024-04-17 34/week @ 2024-04-24 121/week @ 2024-05-01 53/week @ 2024-05-08 156/week @ 2024-05-15 60/week @ 2024-05-22 22/week @ 2024-05-29 163/week @ 2024-06-05 41/week @ 2024-06-12 40/week @ 2024-06-19 12/week @ 2024-06-26

260 每月下载量

MIT/Apache

155KB
3.5K SLoC

openqasm-rs

此包实现了 OpenQASM 2.0 的解析器、类型检查器和翻译器。

功能

  • 在翻译前和翻译期间进行完全类型检查。
  • 得益于 ariadne,提供美观的错误信息。
  • 使用 pretty 进行格式化打印。
  • 灵活处理包含语句以实现沙盒。
  • 为了便于使用,在规范上略有放宽,例如允许门定义无序且优雅地处理包含循环。
  • 无不安全代码。

未来路线图

  • 支持 OpenQASM 3.0。
  • 提供语法高亮和语言服务器扩展。
  • 提供可视化电路的实用工具。
  • 在 2.0 到 3.0 之间转译 OpenQASM,或将其转换为其他语言,如 Quil。

示例

解析文件并格式化打印

use openqasm as oq;
use oq::GenericError;

fn main() {
    let mut cache = oq::SourceCache::new();
    let mut parser = oq::Parser::new(&mut cache)
        .with_file_policy(oq::parser::FilePolicy::Ignore);
    parser.parse_file("file.qasm");

    let prog = parser.done().to_errors().unwrap();
    println!("{}", prog.to_pretty(70));
}

类型检查程序

use openqasm as oq;
use oq::GenericError;

fn example(path: &str, cache: &mut oq::SourceCache) -> Result<(), oq::Errors> {
    let mut parser = oq::Parser::new(cache);
    parser.parse_file(path);
    let program = parser.done().to_errors()?;
    program.type_check().to_errors()?;
    Ok(())
}

fn main() {
    let mut cache = oq::SourceCache::new();
    if let Err(errors) = example("filename.qasm", &mut cache) {
        errors.print(&mut cache).unwrap();
    }
}

更多示例请参阅 examples 目录。

依赖关系

~4.5–7MB
~94K SLoC