2016-06-10 01:23:41 +02:00
|
|
|
#ifndef __PLASP__LANGUAGE_DETECTION_H
|
|
|
|
#define __PLASP__LANGUAGE_DETECTION_H
|
|
|
|
|
2017-05-12 14:17:57 +02:00
|
|
|
#include <tokenize/Tokenizer.h>
|
2016-06-10 01:23:41 +02:00
|
|
|
|
2017-06-22 20:58:31 +02:00
|
|
|
#include <plasp/Language.h>
|
|
|
|
|
2016-06-10 01:23:41 +02:00
|
|
|
namespace plasp
|
|
|
|
{
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// LanguageDetection
|
|
|
|
//
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2017-10-13 18:32:32 +02:00
|
|
|
inline Language::Type detectLanguage(tokenize::Tokenizer<tokenize::CaseInsensitiveTokenizerPolicy> &tokenizer)
|
2016-06-10 01:23:41 +02:00
|
|
|
{
|
2017-05-12 14:17:57 +02:00
|
|
|
tokenizer.skipWhiteSpace();
|
2016-06-10 01:23:41 +02:00
|
|
|
|
|
|
|
// SAS begins with "begin_version"
|
2017-05-12 14:17:57 +02:00
|
|
|
if (tokenizer.testAndSkip<std::string>("begin"))
|
2016-06-10 01:23:41 +02:00
|
|
|
{
|
2017-05-12 14:17:57 +02:00
|
|
|
tokenizer.seek(0);
|
2016-06-10 01:23:41 +02:00
|
|
|
return Language::Type::SAS;
|
|
|
|
}
|
|
|
|
|
2016-06-10 16:40:43 +02:00
|
|
|
// Skip potential PDDL comments
|
2017-05-12 14:17:57 +02:00
|
|
|
while (tokenizer.currentCharacter() == ';')
|
2016-06-10 16:40:43 +02:00
|
|
|
{
|
2017-05-12 14:17:57 +02:00
|
|
|
tokenizer.skipLine();
|
|
|
|
tokenizer.skipWhiteSpace();
|
2016-06-10 16:40:43 +02:00
|
|
|
}
|
|
|
|
|
2017-06-20 03:01:20 +02:00
|
|
|
// PDDL contains sections starting with “(define”
|
|
|
|
// Some legacy domains contain “in-package” sections, however
|
|
|
|
if (tokenizer.testAndSkip<std::string>("(")
|
|
|
|
&& (tokenizer.testAndSkip<std::string>("define") || tokenizer.testAndSkip<std::string>("in-package")))
|
2016-06-10 16:40:43 +02:00
|
|
|
{
|
2017-05-12 14:17:57 +02:00
|
|
|
tokenizer.seek(std::ios::beg);
|
2016-06-10 16:40:43 +02:00
|
|
|
return Language::Type::PDDL;
|
|
|
|
}
|
|
|
|
|
2017-05-12 14:17:57 +02:00
|
|
|
tokenizer.seek(std::ios::beg);
|
2016-06-10 01:23:41 +02:00
|
|
|
return Language::Type::Unknown;
|
|
|
|
}
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|