diff --git a/app/main.cpp b/app/main.cpp index c10ee6d..66564dc 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -5,6 +5,7 @@ #include #include +#include #include #include @@ -27,6 +28,7 @@ int main(int argc, char **argv) ("help,h", "Display this help message") ("version,v", "Display version information") ("input,i", po::value>(), "Input files (in PDDL or SAS format)") + ("parsing-mode", po::value()->default_value("strict"), "Parsing mode (strict, compatibility)") ("language,l", po::value()->default_value("auto"), "Input language (pddl, sas, auto)") ("color", po::value()->default_value("auto"), "Colorize output (always, never, auto)") ("log-priority,p", po::value()->default_value("warning"), "Log messages starting from this priority (debug, info, warning, error)") @@ -80,6 +82,20 @@ int main(int argc, char **argv) if (warningsAsErrors) logger.setAbortPriority(plasp::output::Priority::Warning); + auto parsingMode = pddl::Mode::Strict; + + const auto parsingModeString = variablesMap["parsing-mode"].as(); + + if (parsingModeString == "compatibility") + parsingMode = pddl::Mode::Compatibility; + else if (parsingModeString != "strict") + { + logger.log(plasp::output::Priority::Error, "unknown parsing mode “" + parsingModeString + "”"); + std::cout << std::endl; + printHelp(); + return EXIT_FAILURE; + } + const auto colorPolicy = variablesMap["color"].as(); if (colorPolicy == "auto") @@ -159,6 +175,7 @@ int main(int argc, char **argv) }; auto context = pddl::Context(std::move(tokenizer), logWarning); + context.mode = parsingMode; auto description = pddl::parseDescription(context); const auto translator = plasp::pddl::TranslatorASP(std::move(description), logger.outputStream()); translator.translate();