#前端 #qasm #解析器 #openqasm3 #搜索路径

oq3_source_file

管理源文件、包含文件和诊断报告 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 日

#2340解析器实现

Download history 1390/week @ 2024-04-22 2645/week @ 2024-04-29 2222/week @ 2024-05-06 1872/week @ 2024-05-13 1039/week @ 2024-05-20 1222/week @ 2024-05-27 2085/week @ 2024-06-03 1837/week @ 2024-06-10 1969/week @ 2024-06-17 2632/week @ 2024-06-24 2980/week @ 2024-07-01 2268/week @ 2024-07-08 1581/week @ 2024-07-15 2588/week @ 2024-07-22 3453/week @ 2024-07-29 2290/week @ 2024-08-05

9,948 每月下载量
用于 oq3_semantics

Apache-2.0

295KB
8K 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 中的后续内容。

Crates(大约每个 crate 有一个可安装的库)

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

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

我们谈论 Rust 的 "crate"。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

依赖关系

~3–14MB
~98K SLoC