Я пишу анализатор Qi, чтобы проанализировать выражения, подобные тем, что ниже: < /p>
(! $ 23 && $ 45) || ! $ 67 < /p>
И, возможно, более общий, как < /p>
!($1 && $2 && $3) || (!$4 && $5) && $6)
< /code>
К сожалению, я использую VisualStudio 2010 с старой версией Boost 1.67, так что нет STD C ++ 11 доступен < /p>
Я начинаю с простого до правильного анализа, таких как $ (т. Е. Например, $ 89) и определение грамматической системы. Правила, с которыми я в конечном итоге, были эти: < /p>
stepid = long_[ref(longv) = _1, _val = _1];
stepref = (lit("$") >> stepid)[phx::bind(&evaluate_step, &longv, &boolv), _val = ref(boolv) ];
< /code>
, где Longv и Boolv являются двумя атрибутами грамматики (Long и Bool), а оценка_теп является простой глобальной функцией с этой подписью < /p>
void evaluate_step(const long* s, bool* b)
< /code>
Далее я определил правило для определения фактора < /p>
factor = stepref[_val = _1] | "!" >> stepref[_val = !_1];
< /code>
Эти три правила могут разрабатывать без ошибок, такие как 45 долларов и!term = factor[_val = _1] | (factor[_val = _1] >> "&&" >> factor)[_val = _val && _1];
< /code>
, чтобы разобрать строки, такие как "$ 2 &&! 3 $". Я пытаюсь проанализировать «$ 32 && $ 33». Ниже вы можете найти весь грамматический код и как он используется. < /P>
template
struct composite : qi::grammar
{
composite() : composite::base_type(start)
{
using qi::lit;
using qi::_val;
using qi::_1;
using qi::_2;
using qi::_3;
using qi::_4;
using qi::long_;
using ascii::char_;
using phx::ref;
using phx::val;
stepid = long_[ref(longv) = _1, _val = _1];
stepref = (lit("$") >> stepid)[phx::bind(&evaluate_step, &longv, &boolv), _val = ref(boolv) ];
term = factor[_val = _1] |
(factor[_val = _1] >> "&&" >> factor)[_val = _val && _1];
factor = stepref[_val = _1] |
"!" >> stepref[_val = !_1];
start = term[_val = _1];
}
qi::rule stepid;
qi::rule stepref;
qi::rule term;
qi::rule factor;
qi::rule start;
long longv;
bool boolv;
};
int _tmain(int argc, _TCHAR* argv[])
{
using boost::spirit::ascii::space;
std::string expr = "$32 && $33";
composite c;
bool result = false;
std::string::iterator iter = expr.begin();
std::string::iterator end = expr.end();
bool r = phrase_parse(iter, end, c, space, result);
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79663402/why-qi-parser-stops-before-text-end[/url]
Я пишу анализатор Qi, чтобы проанализировать выражения, подобные тем, что ниже: < /p> (! $ 23 && $ 45) || ! $ 67 < /p> И, возможно, более общий, как < /p> [code]!($1 && $2 && $3) || (!$4 && $5) && $6) < /code> К сожалению, я использую VisualStudio 2010 с старой версией Boost 1.67, так что нет STD C ++ 11 доступен < /p> Я начинаю с простого до правильного анализа, таких как $ (т. Е. Например, $ 89) и определение грамматической системы. Правила, с которыми я в конечном итоге, были эти: < /p> stepid = long_[ref(longv) = _1, _val = _1]; stepref = (lit("$") >> stepid)[phx::bind(&evaluate_step, &longv, &boolv), _val = ref(boolv) ]; < /code> , где Longv и Boolv являются двумя атрибутами грамматики (Long и Bool), а оценка_теп является простой глобальной функцией с этой подписью < /p> void evaluate_step(const long* s, bool* b) < /code> Далее я определил правило для определения фактора < /p> factor = stepref[_val = _1] | "!" >> stepref[_val = !_1]; < /code> Эти три правила могут разрабатывать без ошибок, такие как 45 долларов и!term = factor[_val = _1] | (factor[_val = _1] >> "&&" >> factor)[_val = _val && _1]; < /code> , чтобы разобрать строки, такие как "$ 2 &&! 3 $". Я пытаюсь проанализировать «$ 32 && $ 33». Ниже вы можете найти весь грамматический код и как он используется. < /P> template struct composite : qi::grammar { composite() : composite::base_type(start) { using qi::lit; using qi::_val; using qi::_1; using qi::_2; using qi::_3; using qi::_4; using qi::long_; using ascii::char_; using phx::ref; using phx::val;
using boost::spirit::ascii::space; std::string expr = "$32 && $33";
composite c;
bool result = false; std::string::iterator iter = expr.begin(); std::string::iterator end = expr.end(); bool r = phrase_parse(iter, end, c, space, result);
Я добавляю время начала и окончания в HTML-тег видео и пишу код в событии окончания видео. Но проблема в том, что когда я использую время начала и окончания в теге html-видео, завершенное событие не работает, но работает нормально без использования...
Я работаю над задачей, в которой мне нужно реализовать способ обучения процессора (который уже обучен в gcloud) с помощью кода. Я пытаюсь найти решение этой проблемы, но не могу найти адекватный способ трианинга из кода. Мне также интересно, какую...
Есть идеи по поводу хорошего парсера с простым в использовании и настраиваемым API? Я хочу передать ему данные, такие как выбрать нужные разделы данных и вывести пользовательский HTML-код для каждый уникальный тип элемента? Java было бы...