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

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