A PDDL 3.1 parser, strongly typed

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

A PDDL 3.1 parser implementation in Rust based on nom. See src/briefcase_world.rs for an example.

Parser and domain/problem types can be used separately and will be completely decoupled through crate features in the future.

Documentation comments are assembled from the PDDL papers and nergmada/planning-wiki.

Caveat Emptor

At this point the parser supports all domain and problem definition elements required to fully describe a PDDL 3.1 (and earlier) environment.

However, since types and enum variants are named closely to the underlying BNF descriptions (see below), they may be a bit unwieldy to use still.

Supported Elements

Parsers were implemented based on the BNF elements listed in the paper:

"Complete BNF description of PDDL 3.1 (completely corrected)", Daniel L. Kovacs

See ELEMENTS.md for a graph of BNF elements.

Additional elements were added based on the individual specification papers.

Domain Description

Additional elements:

Problem Description

Lifting Restrictions

Using embedded modal operators:

Requirements

The following requirements can be parsed. Note that all requirement specific features are parsed unconditionally. A planner needs to ensure that it accepts or rejects a plan accordingly based on the stated domain requirements.