#qasm #front-end #openqasm3 #parser

oq3_parser

OpenQASM 3 解析器/分析器

13 个版本 (6 个破坏性更新)

0.6.0 2024年5月3日
0.5.0 2024年3月26日
0.4.0 2024年3月1日
0.3.0 2024年3月1日
0.0.7 2024年1月31日

#2125解析器实现

Download history 1423/week @ 2024-04-23 2812/week @ 2024-04-30 2049/week @ 2024-05-07 1980/week @ 2024-05-14 879/week @ 2024-05-21 1374/week @ 2024-05-28 2183/week @ 2024-06-04 1754/week @ 2024-06-11 2149/week @ 2024-06-18 2798/week @ 2024-06-25 2967/week @ 2024-07-02 1861/week @ 2024-07-09 1867/week @ 2024-07-16 2901/week @ 2024-07-23 2897/week @ 2024-07-30 2489/week @ 2024-08-06

每月10,318次下载
用于 3 个crate(2个直接使用)

Apache-2.0

195KB
4K SLoC

OpenQASM 3 解析器

License Minimum rustc 1.70 oq3_semantics crate

本项目为 OpenQASM 3 语言(OQ3)提供编译器前端。

在此文档中,此解析器被称为 openqasm3_parser

为什么这很重要?

OpenQASM 3 在许多用途上引起了广泛关注。例如,用于控制硬件和作为量子电路的交换介质。此项目旨在为编译器和导入器提供性能优异、健壮的前端。目前没有其他此类开源(或公开)项目。

OpenQASM 参考解析器 的不同之处包括

  • openqasm3_parser 中的解析器性能更优。使用大型源文件进行的粗略测试表明,解析时间缩短了80倍。
  • openqasm3_parser 执行语义分析。特别是诊断和错误报告要好得多。

贡献

如果您有兴趣贡献,浏览问题列表是一个好起点。其中一些问题被标记为 “Looking for assignee”。带有此标记的问题比其他一些问题包含更多的上下文,以引导新来者。此外,核心开发者不打算在近期内处理这些问题。然而,这并不意味着如果您认为更合适,就不能处理带有此标记的问题。

CONTRIBUTING.md 中还有一些其他提示,以及一些在此 README 中的后续提示。

Crate(大致每个crate一个可安装的库)

前三个crate基于 rustrust-analyzer 的工具。

  • oq3_lexer -- rustc(Rust 编译器)词法分析器的轻微修改版本。
  • oq3_parser -- 读取 oq3_lexer 的输出,并输出一个具体语法树。
  • oq3_syntax -- 从 oq3_parser 获取输出并输出一个抽象语法树(AST)。rust-analyzer 的 文档 有时会用“类型化 AST”这样的词来指代这个 AST,这可能有些令人困惑。这并不意味着语义分析已经完成,并且已经将 OQ3 类型分配给了所有表达式。这意味着使用 rust 类型系统来编码语法元素,这与该crate中一些较低级别的表示不同。
  • oq3_semantics -- 执行 语义分析 并输出一个 抽象语义图(ASG)。这个结构还有其他名称,但“ASG”更方便。
  • oq3_source_file -- 对语法 AST 的高级接口。它位于语法 AST 和语义 ASG 之间。这个crate管理主源文件和包含的源文件。
什么是 rust "crate"?

我们谈论 rust "crates"。一个 rust 库 crate 大约是 rust 库的源代码,这些库是通过 rust 包管理器 cargo 开发、构建和安装的。这个单一代码库包含多个可以单独安装的 crate。在未来,这个仓库也可能被用来生成其他工件。

警告 !

不要运行 cargo test。而是使用 ./run_tests.sh 或其中找到的命令。这是因为代码生成是通过测试系统实现的(你读对了)。如果可能的话,我们计划将其改为更传统的做法。

使用这个前端

提醒:前端如果没有后端就没有太大用处。可以在这个 ./crates/oq3_semantics/examples/semdemo.rs 中找到示例,展示入口点和如何使用它们。

shell> export QASM3_PATH=./crates/semantics/examples/qasm/
shell> cargo run --example semdemo -- semantic scratch1.qasm

scratch1.qasm 替换为 ./crates/oq3_semantics/examples/qasm/ 中找到的某个文件。

搜索路径

环境变量 QASM_PATH 是由冒号分隔的路径列表。请注意,名称遵循了古老的 Unix 传统,以 PATH 结尾而不是 PATHS。检索路径的代码使用的是 std::path 程序,它可以实际上处理其他平台上的路径规范。

设计

从 rust-analyzer 借用了代码并对其进行了修改,用于解析的较低级别。rust-analyzer 的 开发者文档 非常相关,因为结构在适应 OQ3 时没有改变。

备注

一些代码是从 rust-analyzer 中修改的。它是在 这个提交 中采用的。

commit d398ad3326780598bbf1480014f4c59fbf6461a7
Merge: 2f2cf21da 6990d0f26
Author: bors <[email protected]>
Date:   Wed Aug 2 14:28:41 2023 +0000

    Auto merge of #15380 - HKalbasi:mir, r=HKalbasi

    Fix unsized struct problems in mir eval

依赖项

~355KB