- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 boost spirit 来解析颜色。效果很好,但在我更改迭代器类型后, skipper 停止工作。
"rgb(1.0,1.0,0.5)" // this works
" rgb(0.2,0.2,0.2)" // this fails
这是标题:
struct ColorGrammar : public qi::grammar<StringIterator, Color(), chs::space_type>
{
//! Iterator type for this grammar
typedef StringIterator ItType;
//! Skipper type used in this grammar
typedef chs::space_type Skipper;
//! Rule to parse a number with up to 3 digits
qi::uint_parser<uint8, 10, 1, 3> number;
//! Rule to parse a hex digit
qi::uint_parser<uint8, 16, 1, 1> hexdigit;
ColorGrammar();
//! Rule for rgb(...)
qi::rule<ItType, Color(), qi::locals<float, float>, Skipper> rule_rgb;
//! Rule for rgba(...)
qi::rule<ItType, Color(), qi::locals<float, float, float>, Skipper> rule_rgba;
//! Mainrule
qi::rule<ItType, Color(), Skipper> rule_color;
};
这是cpp
ColorGrammar::ColorGrammar()
: ColorGrammar::base_type(rule_color, "color-grammar")
{
using namespace qi::labels;
using boost::phoenix::construct;
auto& _1 = qi::_1;
rule_rgb = '(' >> qi::float_[_a = _1] >> ',' >> qi::float_[_b = _1] >> ',' >> qi::float_[_val = phx::construct<Color>(_a, _b, _1)] >> ')';
rule_rgba = '(' >> qi::float_[_a = _1] >> ',' >> qi::float_[_b = _1] >> ',' >> qi::float_[_c = _1] >> ',' >> qi::float_[_val = phx::construct<Color>(_a, _b, _c, _1)] >> ')';
rule_color = (qi::lit("rgb") >> rule_rgb)
| (qi::lit("rgba") >> rule_rgba);
}
调用:
Color out;
StringIterator begin = str.cbegin();
StringIterator end = str.cend();
bool result = qi::phrase_parse(begin, end, color_, chs::space, out);
我敢肯定,这只是一个小错误,但我看不到。也许我在源头上看得太久了……你能看出错误吗?
最佳答案
我看不出有什么问题:我已经努力重建您的 SSCCE。
在这个过程中,看来我一定已经解决了这个问题。我建议您也这样做。
简而言之:不再大惊小怪。
#include <boost/spirit/include/qi.hpp>
#include <boost/fusion/adapted/struct.hpp>
#include <cstdint>
namespace qi = boost::spirit::qi;
namespace chs = boost::spirit::ascii; //qi;
typedef std::string::const_iterator StringIterator;
struct Color
{
float r,g,b,a;
};
BOOST_FUSION_ADAPT_STRUCT(Color, (float, r)(float, g)(float, b)(float, a))
template <typename ItType, typename Skipper>
struct ColorGrammar : public qi::grammar<StringIterator, Color(), Skipper>
{
ColorGrammar()
: ColorGrammar::base_type(rule_color, "color-grammar")
{
using namespace qi;
rule_rgb = lit("rgb") >> '(' > float_ > ',' > float_ > ',' > float_ > attr(1.0f) > ')';
rule_rgba = lit("rgba") >> '(' > float_ > ',' > float_ > ',' > float_ > ',' > float_ > ')';
rule_color = rule_rgb | rule_rgba;
}
private:
qi::uint_parser<uint8_t, 10, 1, 3> number; // unused
qi::uint_parser<uint8_t, 16, 1, 1> hexdigit; // unused
qi::rule<ItType, Color(), Skipper> rule_rgb, rule_rgba, rule_color;
};
int main()
{
Color out;
std::string str = " rgb ( 0.3 , .4 , 0.5 )";
StringIterator begin = str.cbegin();
StringIterator end = str.cend();
ColorGrammar<StringIterator, chs::space_type> color_;
bool result = qi::phrase_parse(begin, end, color_, chs::space, out);
std::cout << std::boolalpha << result << '\n';
std::cout << "remains: '" << std::string(begin, end) << "'\n";
}
关于c++ - skipper 在 boost::spirit 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14811227/
我试图用一种有点奇怪的语法为该语言编写一个解析器,并偶然发现了一个船长的问题,这使我认为我不完全了解它们在Boost.Spirit.X3中的工作方式。 问题在于,对于某些规则,EOL是有意义的(即,我
我在使用 boost spirit skippers 时遇到了麻烦。 我需要像这样解析一个文件: ROW int int [int, int] int [int, int] ... 我能够毫无问题地解
我有以下代码: #include #include #include #include BOOST_FUSION_DEFINE_STRUCT( (), foo, (int, bar)
我在使用 boost spirit skippers 时遇到了麻烦。 我需要像这样解析一个文件: ROW int int [int, int] int [int, int] ... 我能够毫无问题地解
正如标题,现在我无法在上传前检查文件类型。我只验证文件上传成功后不允许保存数据。下面是基本代码 updateAvatar : function(data, context, req, res) {
我使用 boost spirit 来解析颜色。效果很好,但在我更改迭代器类型后, skipper 停止工作。 "rgb(1.0,1.0,0.5)" // this works " rgb(0.2,0
我对 sails-skipper 有一个大问题。有时它工作正常,但大多数情况下当我发布文件(带有元字段)时它会刷新正文。 console.log(req.body) 打印{}。 我已在此问题发布此 #
引用:https://github.com/balderdashy/skipper/issues/49 适配器:船长网格 基本 Controller 代码: req.file('fileTest')
我有一个可以上传文件的表单。我直接用船长上传文件,效果很好。 req.file('file').upload({ adapter: require('skipper-s3'), key
我正在尝试使用 boost::spirit 构建一个解析器,除了其他内容外,它应该能够解析成对的整数,例如“(3,4)”。 我的代码可以正常工作,但我也想接受包含空格的对,即“( 4 , 6 )”。当
假设我们要像这样解析一个递归 block 。当“skip_comments_tag”作为 block 的前缀时,我们递归地跳过该 block 内的所有评论(/*...*/)。 { {}
我必须使用 boost::spirit 进行解析,我想使用 phrase_parse 函数: qi::phrase_parse(str.begin(), str.end(), grammar, asc
我在我的 sails.js 应用程序中使用 gridfs 将图像上传到服务器。我的上传代码如下 upload: function (req, res) { req.file('ava
我正在使用 skipper 上传文件,一切正常,但我的选项 save 有问题,因为我通过函数为其分配值但它不起作用,我如何分配 req 的值。 param('titulo') + 选项另存为的文件扩展
我知道我可以通过使用适当的“解析”成员函数模板创建一个对象来实现自定义解析器,但我不知道我需要做什么才能使它在上下文中使用 skipper ,这似乎需要做.也就是说,下面我预计两种情况都会成功,但第二
所以我有以下 qi skipper : template struct verilog_skipper : public qi::grammar { verilog_skipper() : veril
我已经开始在 Sails.js 中使用 pkgcloud 为 Skipper 构建自定义适配器来上传到 Rackspace 云文件,但我陷入了困境。该文件似乎并未实际上传,并且 try catch 错
我正在使用 Skipper.js 将图像上传到 Amazon Web Service S3,但使用 无法为上传的文件创建公共(public) URL>Skipper.js。我不想使用 Skipper-
我正在升级到 Sails.js 版本 0.10,现在需要使用 Skipper管理我的文件上传。 当我上传一个文件时,我会使用 UUID 为其生成一个新名称,并将其保存在 public/files/文件
我是一名优秀的程序员,十分优秀!