У меня есть текст, содержащий "уравнения", например:
-- This is comment
ABC:= 121-XY1/7 > 45 OR SS >= 3
ZY2 AND -- This is another comment
(JKL * PQR) < 75;
JKL:= PP1 OR
PP2/2 XOR PP3;
ZZ_1:=A-B > 0 XOR (B2 % GH == 6 AND
SP == 4
-- Again a comment
NOT AX > GF < 2 OR C*AS2 >= 5);
Я решил использовать дух ускорения для анализа этого текста, на данный момент мне просто нужно знать свои операнды и операторы.
Я сослался на этот хороший ответ (спасибо sehe :)), чтобы написать грамматику выражения (операторы отношения еще не написаны)
Однако я не могу убрать свои комментарии с помощью: -
qi::phrase_parse(input.begin()
,input.end()
,p >> ';' // parser object
,qi::space | "--" >> *(qi::char_ - qi::eol) >> qi::eol
,result //expression object, (boost::variant with boost::recursive_wrapper)
);
поскольку это дает несколько ошибок, в некоторых сообщении говорится, что нужно настроить файл заголовка повышения.
Итак, я использую другую грамматику, чтобы сначала убрать комментарий, используя:
qi::phrase_parse(input.begin()
,input.end()
,qi::char_ >> *qi::char_
, qi::space | "--" >> *(qi::char_ - qi::eol) >> qi::eol
,stripped // std::string
);
Но это дает мне текст с удаленными пробелами и комментариями:
ABC:=121-XY1/7>45ORSS>=3ZY2AND(JKL*PQR)<75;JKL:=PP1ORPP2/2XORPP3;ZZ_1:=A-B>0XOR(B2%GH==6ANDSP==4NOTAX>GF<2ORC*AS2>=5);
Итак, вопрос в том, как я могу удалить только комментарии, сохранив место и новые строки?
Использование: Boost версии 1.55.0
decltype
илиBOOST_TYPEOF
. Если бы это была ваша проблема (а я делаю снимок в темноте), я считаю, что обычным решением является создание грамматики шкипера (что-то вроде это). - person llonesmiz   schedule 01.02.2014phrase_parse(f,l,qi::char_ >> *qi::char_ ,"--" >> *(qi::char_ - qi::eol) >> qi::eol,strip);
(пока я не перенаправил вывод в текстовый файл), который в основном совпадает с тем, что вы сказали, если я прав? Пожалуйста, ответьте, я приму. Также относительно начального решения, не могли бы вы рассказать, как определить грамматику для оператора отношения, подобного this? а также включить шкипера, чтобы пропустить комментарий. Я попробовал вышеуказанный пост, но это не сработало - person P0W   schedule 01.02.2014