У меня есть этот простой синтаксический анализатор, предназначенный для анализа строк с двойными кавычками в стиле VB. Таким образом, парсер должен получить что-то вроде
"This is a quoted string containing quotes ("" "")"
в вывод
This is a quoted string containing quotes (" ")
Вот грамматика, которую я придумал для этого:
namespace qi = boost::spirit::qi;
namespace wide = qi::standard_wide;
class ConfigurationParser : public qi::grammar<std::wstring::iterator, std::wstring()>
{
qi::rule<std::wstring::iterator, std::wstring()> quotedString;
qi::rule<std::wstring::iterator> doubleQuote;
public:
ConfigurationParser() : ConfigurationParser::base_type(quotedString, "vFind Command Line")
{
doubleQuote = (wide::char_(L'"') >> wide::char_(L'"'));
quotedString = L'"' >> +(doubleQuote[qi::_val = L'"'] | (wide::char_ - L'"'))>> L'"';
}
};
Однако атрибут, который я получаю, представляет собой одинарную кавычку ("), а не полное проанализированное сообщение.