Мне нужно, чтобы слова подходящие к правилу выводились на экран. Правило - слова в которых есть 6 больших букв подряд(например: АНДРЕЙ, АНДРИАНА, АБВГДЕЖзыий). Я пробовал переделать чужой код, но не сильно получилось.
#include <iostream>
#include <string>
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
template <typename Iterator>
struct calculator_simple : qi::grammar<Iterator>{
calculator_simple() : calculator_simple::base_type(expression){
expression = term >> term >> term >> term >> term >> term;
term = expression|'Q'|'W'|'E'|'R'|'T'|'Y'|'U'|'I'|'O'|'P'|'A'|'S'|'D'|'F'|'G'|'H'|'J'|'K'|'L'|'Z'|'X'|'C'|'V'|'B'|'N'|'M';}
qi::rule<Iterator> expression, term;
};
int main(){
std::cout << "Welcome to the expression parser!\n\n";
std::cout << "Type an expression or [0] to quit\n\n";
typedef std::string str_t;
typedef str_t::iterator str_t_it;
str_t expression;
calculator_simple<str_t_it> calc;
while(true){
std::getline(std::cin, expression);
if(expression == "0") break;
str_t_it begin = expression.begin(), end = expression.end();
bool success = qi::parse(begin, end, calc);
std::cout << "---------------------\n";
if(success && begin == end)
std::cout << "Parsing succeeded\n";
else
std::cout << "Parsing failed\nstopped at: \""
<< str_t(begin, end) << "\"\n";
std::cout << "---------------------\n";
}
}
Оригинал программы которую я переделывал:
#include <iostream>
#include <string>
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
template <typename Iterator>
struct calculator_simple : qi::grammar<Iterator>{
calculator_simple() : calculator_simple::base_type(expression){
expression = term >> *( '+' >> term | '-' >> term );
term = factor >> *( '*' >> factor | '/' >> factor );
factor =
qi::uint_
| '(' >> expression >> ')'
| '+' >> factor
| '-' >> factor;
}
qi::rule<Iterator> expression, term, factor;
};
int main(){
std::cout << "Welcome to the expression parser!\n\n";
std::cout << "Type an expression or [q or Q] to quit\n\n";
typedef std::string str_t;
typedef str_t::iterator str_t_it;
str_t expression;
calculator_simple<str_t_it> calc;
while(true){
std::getline(std::cin, expression);
if(expression == "q" || expression == "Q") break;
str_t_it begin = expression.begin(), end = expression.end();
bool success = qi::parse(begin, end, calc);
std::cout << "---------------------\n";
if(success && begin == end)
std::cout << "Parsing succeeded\n";
else
std::cout << "Parsing failed\nstopped at: \""
<< str_t(begin, end) << "\"\n";
std::cout << "---------------------\n";
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Если включить вcpp файл QtWidgets, то при проверке синтаксе clang (clang_complete, vim) отметиться ошибка, при переходе по которой мы поподем в файл qglobal
Накануне делаю простенькое приложение, а именно график на кривые ЛиссажуПочти все сделал, но остаётся маленькая загвоздка
Здравствуйте возник вопрос в синхронизации отдельной части приложения, вот пример: