- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Spirit X3 解析器来处理命令行工具的输出,但遇到了问题。我已将它们缩小到一个我不理解其行为的最小示例:
#include <string>
#include <vector>
#include <boost/spirit/home/x3.hpp>
int main() {
namespace x3 = boost::spirit::x3;
std::wstring const str = L"bonjour je suis un petit panda";
auto word = x3::lexeme[+x3::alpha];
std::wstring s;
x3::phrase_parse(begin(str), end(str), word, x3::space, s); // OK
std::vector<std::wstring> v;
x3::phrase_parse(begin(str), end(str), *word, x3::space, v); // Compiler error
}
错误非常多,但归结为无法调用 move_to
,其中 IIUC 是属性类型不匹配的症状。
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:180:9: error: no matching function for call to 'move_to'
detail::move_to(std::move(src), dest
^~~~~~~~~~~~~~~
[...]
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:56:9: note: candidate function not viable: no known conversion from 'typename attribute_category<basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > >::type' (aka 'boost::spirit::x3::traits::container_attribute') to 'boost::spirit::x3::traits::unused_attribute' for 3rd argument
move_to(Source&&, Dest&, unused_attribute) {}
^
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:74:9: note: candidate function not viable: no known conversion from 'typename attribute_category<basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > >::type' (aka 'boost::spirit::x3::traits::container_attribute') to 'boost::spirit::x3::traits::plain_attribute' for 3rd argument
move_to(Source&& src, Dest& dest, plain_attribute)
^
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:97:9: note: candidate function not viable: no known conversion from 'typename attribute_category<basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > >::type' (aka 'boost::spirit::x3::traits::container_attribute') to 'boost::spirit::x3::traits::tuple_attribute' for 3rd argument
move_to(Source&& src, Dest& dest, tuple_attribute)
^
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:106:9: note: candidate function not viable: no known conversion from 'typename attribute_category<basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > >::type' (aka 'boost::spirit::x3::traits::container_attribute') to 'boost::spirit::x3::traits::tuple_attribute' for 3rd argument
move_to(Source&& src, Dest& dest, tuple_attribute)
^
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:150:9: note: candidate function not viable: no known conversion from 'typename attribute_category<basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > >::type' (aka 'boost::spirit::x3::traits::container_attribute') to 'boost::spirit::x3::traits::variant_attribute' for 3rd argument
move_to(Source&& src, Dest& dest, variant_attribute tag)
^
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:85:35: note: candidate template ignored: disabled by 'enable_if' [with Source = const wchar_t, Dest = std::__1::basic_string<wchar_t, std::__1::char_traits<wchar_t>, std::__1::allocator<wchar_t> >]
inline typename enable_if<is_container<Source>>::type
^
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:113:9: note: candidate function template not viable: requires 4 arguments, but 3 were provided
move_to(Source&& src, Dest& dest, variant_attribute, mpl::false_)
^
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:143:9: note: candidate function template not viable: requires 4 arguments, but 3 were provided
move_to(Source&& src, Dest& dest, variant_attribute, mpl::true_)
^
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:157:9: note: candidate function template not viable: requires 4 arguments, but 3 were provided
move_to(Iterator, Iterator, unused_type, unused_attribute) {}
^
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:161:9: note: candidate function template not viable: requires 4 arguments, but 3 were provided
move_to(Iterator first, Iterator last, Dest& dest, container_attribute)
^
/usr/local/include/boost/spirit/home/x3/support/traits/move_to.hpp:171:9: note: candidate function template not viable: requires 4 arguments, but 3 were provided
move_to(Iterator first, Iterator last, boost::iterator_range<Iterator>& rng, container_attribute)
^
我的目标是用空格对句子进行分词。 word
解析器将第一个完整单词返回到 std::string
正如预期的那样。为什么不是 *word
直接兼容 std::vector<std::string>
,我应该写什么?
最佳答案
我不确定它是否真的适用于第一种情况。
您正在使用字符解析器的 ASCII 版本(x3::alpha
是 x3::standard::alpha
的同义词),传递的迭代器值类型是 wchar_t
,但 boost::spirit::char_encoding::standard::ischar()
对非 ascii 字符返回 false。
使用 x3::standard_wide::alpha
可以工作:
#include <string>
#include <vector>
#include <boost/spirit/home/x3.hpp>
int main() {
namespace x3 = boost::spirit::x3;
std::wstring const str = L"bonjour je suis un petit panda";
auto word = x3::lexeme[+x3::standard_wide::alpha];
std::wstring s;
x3::phrase_parse(begin(str), end(str), word, x3::space, s); // OK
std::vector<std::wstring> v;
x3::phrase_parse(begin(str), end(str), *word, x3::space, v); // OK
}
另一个很好的问题是它应该与 ASCII skipper 一起使用吗?由于 Unicode,人们可能会将更多字符视为空格)。
关于c++ - Simple Spirit X3 分词器无法编译,属性不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52078975/
大家好,其实我快疯了,我竭尽全力解决这个简单的问题。 如您所见,狭窄空间中的简单标签导致单个单词“Verification”被分成两行,这当然是 Not Acceptable 。 我知道我只能将行数设
我正在尝试创建类似句子的东西,其中包含随机单词。具体来说,我会有类似的东西: "The weather today is [weather_state]." 并且能够做一些事情,比如找到 [brack
我希望我的导航栏 (.top-bar) 比现在更具响应性。目前,如果屏幕缩小太多,.top-bar-right 类只会下降到 .menu 类之下。我需要 .top-bar-right 来分割自己或打破
我正在尝试编写一个函数来将命令行参数解析为一个 vector 。问题是我似乎无法消除使用全局指针数组作为 vector 。 代码是: /** parse command line arguments
我正在做一些分词实验,如下所示。 lst是一个字符序列,output是所有可能的词。 lst = ['a', 'b', 'c', 'd'] def foo(lst): ... retu
我正在尝试解决 this问题。问题如下 给定一个输入字符串和一个单词字典,看看是否可以将输入字符串分割成以空格分隔的字典单词序列。 字典是一个字符串数组。 我的方法是以下递归 fn 并存储递归调用的结
我正在研究这个问题。似乎我找到了正确的答案并返回 true,但随后它被 false 覆盖。Java 新手,抱歉,如果这是一个虚拟问题。我如何返回 true?预先感谢您 问题给定一个字符串 s 和一本单
我正在使用 word-break css 属性,但即使是一个简单的示例似乎也无法让它工作。我的代码是: react : render() { return ( A very very lo
我正在尝试更改 word-break某些内联元素的属性,例如 和 以获得更好的页面内容流。 Firefox 似乎只识别显示为 block 的元素的分词属性(例如 ),而 Chrome 尊重分词的请求
我想标记用户输入的任何字符串。我的代码是这样的: #include #include #include int main(void) { char str; char *toke
有没有办法让单词正确对齐?我尝试添加 word-break 和 word-wrap 属性,但没有任何不同。 Subtotal S$42.50 Tota
如何防止 Bash 拆分子字符串中的单词?这是一个有点人为的例子来说明这个问题: touch file1 'foo bar' FILES="file1 'foo bar'" ls -la $FILES
我正在创建一个非常薄的页面(它被打印在收据纸上:56 毫米宽) 我正在尝试显示一些文本(在本例中为运送选择)。有时这个文本是正常的一些间隔单词,例如'Signed for 1st Class',有时是
我正在尝试弄清楚 IFS 如何影响 bash 中的分词。该行为依赖于上下文,其方式似乎与分词的直觉不符。 总体思路似乎很简单。引自 bash 手册页: The shell treats each ch
今天我 Handlebars 机升级到 iOS7,发现了一些奇怪的问题。 (博客.niwyclin.org)这是我网站的测试帖子页面 在桌面浏览器上它看起来不错。 我用Responsivator查了一
我在 jsfiddle 中有以下示例: https://jsfiddle.net/27L545rr/3/ Word-break should cause just the extra charact
我有一个应用程序,我需要解析或标记 XML 并保留原始文本(例如,不解析实体、不转换属性中的空格、保持属性顺序等)在 Java 程序中。 我今天花了几个小时尝试使用 StAX、SAX、XSLT、Tag
到目前为止,这是我的代码: ssssssssssssssssssssssssssssssssssssss 但是, word-wrap:break-word; word-br
我正在尝试使用 word-break打破一个长字符超过其父宽度的单词。 在这个例子中,我有一个 与 width:43px和里面的“玩”字。在 chrome 中,这个词很合适,但在 Firefox 中,
list(gensim.utils.simple_preprocess("i you he she I it we you they", deacc=True)) 给出结果: ['you', 'he'
我是一名优秀的程序员,十分优秀!