我有以下语法,当我编译时,我有很多错误。
#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
template <typename It>
struct parser : qi::grammar<It, std::string()>
{
parser() : parser::base_type(E)
{
using namespace qi;
E = F >> E1;
E1 = *( '+' >> F | '-' >> F );
F = ('(' >> E >> ')') | P | alnum;
P = '@' >> +(~ char_('@') - V) >> V;
V = string(".pv@") | string(".cv@");
}
private:
qi::rule<It, std::string()> E, E1, F, P, V;
};
你能告诉我我错了吗?
我知道错误与* y alnum有关,但我不知道为什么?
答案 0 :(得分:0)
提供的代码没有编译问题。
我可以想象你以微妙的方式称呼它
qi::phrase_parse
,您的语法/规则将需要接受/指定相同的队长first
迭代器需要作为大多数qi::parse_
*来电的参考const_iterator
,则第二个迭代器必须是相同类型才能工作#include <boost/spirit/include/qi.hpp>
namespace qi = boost::spirit::qi;
template <typename It>
struct parser : qi::grammar<It, std::string()>
{
parser() : parser::base_type(E)
{
using namespace qi;
E = F >> E1;
E1 = *( '+' >> F | '-' >> F );
F = ('(' >> E >> ')') | P | alnum;
P = '@' >> +(~ char_('@') - V) >> V;
V = string(".pv@") | string(".cv@");
}
private:
qi::rule<It, std::string()> E, E1, F, P, V;
};
int main()
{
std::string const input("123");
typedef std::string::const_iterator It;
It f(input.begin()), l(input.end());
std::string output;
bool ok = qi::parse(f,l,parser<It>(),output);
if (ok)
std::cout << "Output: '" << output << "'\n";
}