- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码无法编译,但我不知道问题出在哪里:
#include <boost/config/warning_disable.hpp>
#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/include/phoenix_core.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_fusion.hpp>
#include <boost/spirit/include/phoenix_stl.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/variant/recursive_variant.hpp>
#include <boost/foreach.hpp>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
void print (std::string& s)
{
std::cout << "Get string [" << s << ']' << std::endl;
}
namespace client
{
namespace fusion = boost::fusion;
namespace phoenix = boost::phoenix;
namespace qi = boost::spirit::qi;
namespace ascii = boost::spirit::ascii;
template <typename Iterator>
struct my_grammar
: qi::grammar<Iterator, std::string(), ascii::space_type>
{
my_grammar()
: my_grammar::base_type(start)
{
using qi::lit;
using qi::int_;
using qi::lexeme;
using ascii::char_;
using ascii::string;
using ascii::space_type;
using namespace qi::labels;
// Here you can see the rule oct_char with attribute type as char
// +(char) would be vector<char> which is compactable with string type
// Why the compiler still told me the type of the attribute is not right?
start %= lexeme[+(oct_char)] [&print]
;
oct_char =
lexeme["//"
>> char_('0','3') [ _a = ( _1 - '0' ) ]
|| char_('0','7') [ _a = _a << 3 + ( _1 - '0' ) ]
|| char_('0','7') [ _a = _a << 3 + ( _1 - '0' ) ]]
[ _val = _a ]
;
}
qi::rule<Iterator, std::string(), ascii::space_type> start;
qi::rule<Iterator, char(), qi::locals<char>, ascii::space_type> oct_char;
};
}
int main(int argc, char **argv)
{
typedef client::my_grammar<std::string::const_iterator> Grammer;
Grammer grm;
std::string str;
using boost::spirit::ascii::space;
while (getline(std::cin, str))
{
if (str.empty() || str[0] == 'q' || str[0] == 'Q')
break;
if (phrase_parse(str.begin(), str.end(), grm, space))
{
std::cout << "-------------------------\n";
std::cout << "Parsing succeeded\n";
std::cout << "got: " << str << std::endl;
std::cout << "\n-------------------------\n";
}
else
{
std::cout << "-------------------------\n";
std::cout << "Parsing failed\n";
std::cout << "-------------------------\n";
}
}
std::cout << "Bye... :-) \n\n";
return 0;
}
错误信息如下:
Error 2 error C2664: 'void (std::basic_string<_Elem,_Traits,_Ax> )' : cannot convert parameter 1 from 'std::vector<_Ty>' to 'std::basic_string<_Elem,_Traits,_Ax> ' d:\code\boost_1_46_1\boost\spirit\home\support\action_dispatch.hpp 70
有没有人可以给点建议?谢谢
最佳答案
这已在其他地方进行了详细讨论(例如 here )。如果您将打印功能更改为 vector<char>
它会起作用:
void print (std::vector<char> const& s)
{
std::cout << "Get string ["
<< std::string(s.begin(), s.end()) << ']'
<< std::endl;
}
不过,您的代码中还有一个错误。规则 oct_char
不需要船长,因为它在内部使用 lexeme[]
:
qi::rule<Iterator, char(), qi::locals<char> > oct_char;
关于c++ - 提升灵气规则属性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6627716/
我在我的 Swing 应用程序中使用了 Nimbus 外观,它非常酷。 我注意到它是一种“纯粹”的外观和感觉:它“蒙皮”组件,但不添加新的图形元素。 我想知道它的渲染技术的某些部分是否可以重用,例如类
我正在尝试执行以下操作来解析多个“a”,然后解析一个“a”: *(lit("a")) >> lit("a") 不幸的是,boost::spirit::qi 中的 Kleene star * 急切地消耗
我正在使用 boost spirit 解析语法,所有复杂的部分都运行良好;但是,我试图接受数字变量,但似乎无法正确解析它们。除了将数字存储为字符串外,我不想对这些数字做任何事情,但我似乎无法获得与通用
我有以下结构 struct MyStruct { char CODE; char NAME[5]; }; 我把它做成一个 fusion 结构 BOOST_FUSION_ADAPT_ST
我正在解析一些结构模糊如 C 语言代码的输入。像这样: Name0 { Name1 { //A COMMENT!! Param0 *= 2 Param2 = "lol" } } 其中
我想写一个可以使用的解析器(作为 qi 扩展)通过 my_parser(p1, p2, ...) 其中 p1, p2, ... 是 qi 解析器表达式。 实际上,我想实现一个 best_match 解
Boost Spirit Qi 解析当然是 C++ 的一个独特应用,它具有陡峭的学习曲线。在这种情况下,我试图解析一个字符串,该字符串包含一个 struct 的语法正确的 C++ 列表初始化。包含 s
我有一个运行良好的语法,它包含以下几行。 element = container | list | pair; container = name >> '(' >> -(arg % ',') >> '
我如何设置一个规则来返回预定义的输出而不是从我的输入文本中解析出来的内容? 像这个例子:GiveQuoteOrText 将首先尝试使用 Quoted 将输入解析为带引号的字符串,如果失败则应始终输出“
我刚刚在 Qi 中实现了一个基本的解析器来验证指定的 TCP 端口范围,例如80-444。 template struct port_range_grammar : qi::grammar
我正在编写一个小编译器只是为了好玩,我正在使用 Boost Spirit Qi 来描述我的语法。现在我想对语法做一个小改动,以准备一些进一步的补充。不幸的是,这些更改无法编译,我想了解为什么会这样。
我想解析特殊的结构,把剩下的扔掉。但我不想使用 skipper 。 我想获得这些构造的 vector ,所以我使用 Kleene Star 解析器作为主要规则。但是,每当有东西被丢弃时,一个默认构造的
我想解析特殊的结构,把剩下的扔掉。但我不想使用 skipper 。 我想获得这些构造的 vector ,所以我使用 Kleene Star 解析器作为主要规则。但是,每当有东西被丢弃时,一个默认构造的
我是一名优秀的程序员,十分优秀!