Я впервые стараюсь написать свою собственную грамматику с 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++
Программы на C++. Форум разработчиков
1741820379
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79504296/boostspiritqi-compiler-error-when-trying-to-integrate-a-skip-parser[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия