9 个版本

0.1.0 2024年5月19日
0.0.7 2023年5月27日
0.0.2 2023年4月24日

#417解析器实现

Download history 88/week @ 2024-05-13 55/week @ 2024-05-20 20/week @ 2024-07-01 82/week @ 2024-07-29

每月82次下载

EUPL-1.2

450KB
9K SLoC

A PDDL 3.1 解析器,强类型

PDDL 版本 3.1 的领域定义语言解析器:用 Rust 编写,基于 nom

GitHub Workflow Status codecov docs.rs Crates.io Crates.io

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