使用Boost-pripit的功能解析器
function parser using boost-spirit
我正在尝试使用Boost Spirit解析功能。当我尝试将匹配函数保存到字符串中时,我会遇到汇编错误。
parser.cpp:50:58:错误:重载的呼叫" ref(std :: string&)"是 模棱两可的int_ [ref(a)= _1]>> p.definedfunctions [ref(myfunction)= _1]
替换时代码正常运行 [ref(myFunction) = _1]
与[std::cout<<_1]
parser.h
#include <spirit/include/qi.hpp>
#include <iostream>
#ifndef PARSER_H
#define PARSER_H
namespace qi = boost::spirit::qi;
class Parser {
public:
Parser();
Parser(const Parser& orig);
virtual ~Parser();
static std::string parseFuncion(const std::string& s);
private:
qi::symbols<char, std::string> definedFunctions;
};
#endif /* PARSER_H */
parser.cpp
#include <iostream>
#include <iomanip>
#include <stdexcept>
#include <cstdlib>
#include <sstream>
#include <spirit/include/qi.hpp>
#include <spirit/include/phoenix.hpp>
#include "Parser.h"
namespace qi = boost::spirit::qi;
Parser::Parser() {
definedFunctions.add
("^" , "pow")
(">" , "greater")
;
}
Parser::Parser(const Parser& orig) {
}
Parser::~Parser() {
}
std::string Parser::parseFuncion(const std::string& s){
using boost::spirit::qi::_1;
using boost::spirit::qi::int_;
using boost::phoenix::ref;
int a=0, b=0;
std::string myFunction;
Parser p;
const char* first = s.data();
const char* const end = first + s.size();
const bool success = boost::spirit::qi::parse(first, end,
// Implementation of 'full-date' rule from EBNF grammar.
int_[ ref(a) = _1 ] >> p.definedFunctions [ref(myFunction) = _1]
>> int_[ ref(b) = _1 ]
);
if (!success || first != end) {
throw std::logic_error("Parsing failed");
}
std::stringstream ss;
ss<<myFunction<<"("<<a<<","<<b<<")";
return ss.str();
}
由于错误消息说ref
的呼叫是模棱两可的,因为有std::ref
和boost::phoenix::ref
。添加
namespace phx = boost::phoenix;
到顶部并在解析功能中使用phx::ref
。
相关文章:
- 将 Boost MPL 容器替换为 C++17 功能
- Boost Variant 是否提供与 std holds_alternative类似的功能?
- Boost进程"系统"功能中的错误处理
- 是boost :: bimap超杀击功能
- 为什么BOOST :: HANA :: EXAREMIS ::键入实验功能?类型列表的棘手是什么
- 如何将Protobuf的Boost :: Shared_ptr指针传递给功能
- BOOST-ASIO ASYNC_RECEIVE_FROM功能超载问题( 动态指针)
- 我如何在函数中使用boost.com pupute函数,该功能将由推力在GPU上使用
- 带有Boost Python的Wrap C 功能 - Numpy数组类型
- 如果功能超载,则BOOST PHOENIX成员功能操作员无法编译
- 使用Boost-pripit的功能解析器
- 当我使用该功能时,"错误 ld 返回 1 个退出状态"boost::log::add_file_log()"
- 带有简单功能的boost :: ASIO服务器
- BOOST ::线程内会成员功能调用返回unique_lock Instantiation错误
- 为什么BOOST.RANGE RANGE_BEGIN/END FREE功能对const和非const引用都重载
- 如何以有效的方式使用boost mpi广播功能
- boost::serialization-序列化从泛型属性/功能容器派生的类
- 我需要在Boost线程功能中调用Unlock()
- boost :: phoenix ::功能遇到麻烦
- 消除对Boost ::的需求,以绑定我的功能