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日 |
#1462 在 解析器实现
每月10,980次下载
用于 2 crates
470KB
12K SLoC
OpenQASM 3解析器
本项目为OpenQASM 3语言(OQ3)提供编译器前端。
在本文档中,此解析器被称为openqasm3_parser
。
为什么这很重要?
OpenQASM 3被广泛应用于多个目的,例如控制硬件和作为量子电路的交换介质。本项目旨在为编译器和导入器提供高性能、健壮的前端。目前没有其他类似的开源(或公共)项目。
与OpenQASM参考解析器的不同之处包括
openqasm3_parser
中的解析器性能更优。使用大型源文件的粗略测试表明,解析时间缩短了80倍。openqasm3_parser
执行语义分析。特别是诊断和错误报告更好。
贡献
如果您有兴趣贡献,浏览问题列表是一个好起点。其中一些问题被标记为“Looking for assignee”。带有此标记的问题比其他一些问题有更多的上下文,以便指导新参与者。此外,核心开发者不打算在近期内解决这些问题。然而,这并不意味着您不能在没有此标记的情况下解决一个问题,如果它更适合的话。
在CONTRIBUTING.md中还有一些其他提示,以及本README中的一些后续内容。
Crates(每个crate大致对应一个可安装的库)
前三个crate基于rust
和rust-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 之间。这个包管理主要源文件和包含的源文件。
什么是 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
依赖关系
~2–13MB
~89K SLoC