Boost :: Spirit :: Qi Compiler Error при попытке интегрировать анализатор SkipC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Boost :: Spirit :: Qi Compiler Error при попытке интегрировать анализатор Skip

Сообщение Anonymous »

Я впервые стараюсь написать свою собственную грамматику с Spirit :: qi, и мне не удастся интегрировать анализатор скипа, который должен игнорировать комментарии стиля C, а также пробелы. Вот мой исходный файл (я уменьшил грамматику до нескольких правил, чтобы быть более кратким: < /p>
#include
#include
#include
#include
#include
#include
#include "formulaNode.h"

namespace qi = boost::spirit::qi;
namespace phoenix = boost::phoenix;

using FormulaNodePtr = compiler::FormulaNode*;
using ExpressionPtr = compiler::Expression*;

template
struct ArithmeticGrammar : qi::grammar {
ArithmeticGrammar() : ArithmeticGrammar::base_type(formula, "Formula") {
using namespace qi;

localSkipper = qi::space | ("/*" >> *(qi::char_ - "*/") >> "*/");

formula = unsignedFactor [_val = _1];

unsignedFactor =
numericConstant [_val = phoenix::new_(_1)];

numericConstant = qi::as_string[
qi::lexeme[ -qi::char_('-') >>
(+qi::digit >> -(qi::char_('.') >> +qi::digit)) >>
-(qi::char_('e') >> -qi::char_('-') >> +qi::digit)
]];
}

qi::rule formula;
qi::rule unsignedFactor;
qi::rule numericConstant;
qi::rule localSkipper;
};

// Parsing function
bool parseExpression(const std::string& input, FormulaNodePtr& result)
{
using Iterator = std::string::const_iterator;
ArithmeticGrammar grammar;

Iterator it = input.begin();
Iterator end = input.end();

bool success = qi::phrase_parse(it, end, grammar, grammar.localSkipper, result);

if (!success || it != end)
{
if (result == nullptr) {
std::cout

Подробнее здесь: https://stackoverflow.com/questions/795 ... kip-parser
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»