Я впервые стараюсь написать свою собственную грамматику с 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
Boost :: Spirit :: Qi Compiler Error при попытке интегрировать анализатор Skip ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Boost :: Spirit :: Qi Compiler Error при попытке интегрировать анализатор Skip
Anonymous » » в форуме C++ - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как я могу использовать полиморфные атрибуты с Boost :: Spirit :: Qi Parsers?
Anonymous » » в форуме C++ - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-