9 个版本
0.1.0 | 2024年5月19日 |
---|---|
0.0.7 | 2023年5月27日 |
0.0.2 | 2023年4月24日 |
#417 在 解析器实现
每月82次下载
450KB
9K SLoC
A PDDL 3.1 解析器,强类型
PDDL 版本 3.1 的领域定义语言解析器:用 Rust 编写,基于 nom。
在 docs.rs/pddl 上可找到该包的文档。
[dependencies]
pddl = "*"
领域/问题类型可以在不依赖于解析器的情况下独立使用;然而,解析器默认通过 parser
包功能启用。要禁用解析器和其依赖项,请使用
[dependencies]
pddl = { version = "*", default-features = false }
文档注释是从 PDDL 论文和 nergmada/planning-wiki 汇编的。
使用示例
有关完整示例,请参阅 tests/briefcase_world.rs
。
use pddl::{Problem, Parser};
pub const BRIEFCASE_WORLD_PROBLEM: &'static str = r#"
(define (problem get-paid)
(:domain briefcase-world)
(:init (place home) (place office) ; place types
(object p) (object d) (object b) ; object types
(at B home) (at P home) (at D home) (in P)) ; setup
(:goal (and (at B office) (at D office) (at P home)))
)
"#;
fn main() {
let problem = Problem::from_str(BRIEFCASE_WORLD_PROBLEM).unwrap();
assert_eq!(problem.name(), "get-paid");
assert_eq!(problem.domain(), "briefcase-world");
assert!(problem.requirements().is_empty());
assert_eq!(problem.init().len(), 9);
assert_eq!(problem.goal().len(), 3);
}
购买者须知
目前,解析器支持完全描述 PDDL 3.1 环境所需的所有领域和问题定义元素。然而,由于类型和枚举变体与底层 BNF 描述(见下文)非常相似,它们可能仍然难以使用。
支持元素
解析器是根据论文中列出的 BNF 元素实现的
"PDDL 3.1 的完整 BNF 描述(完全修正)",Daniel L. Kovacs
有关 BNF 元素的图形,请参阅 ELEMENTS.md。
依赖项
~0–350KB