Tag: 助推

用boost :: spiritparsing引用的string

我想parsing一个句子,其中一些string可能不加引号,“引用”或“引用”。 下面的代码几乎可以工作 – 但它不能匹配收盘报价。 我猜这是因为qq的参考。 在代码中对修改进行了注释,“引用”或“引用”中的修改重新parsing也有助于显示原始问题与结束引用。 代码还描述了确切的语法。 要完全清楚:未加引号的stringparsing。 像'hello'这样'hello'引用string将parsing开放引用' ,所有字符hello ,但是不能parsing最后的引用' 。 我又做了一个尝试,类似于boost教程中的开始/结束标记匹配,但没有成功。 template <typename Iterator> struct test_parser : qi::grammar<Iterator, dectest::Test(), ascii::space_type> { test_parser() : test_parser::base_type(test, "test") { using qi::fail; using qi::on_error; using qi::lit; using qi::lexeme; using ascii::char_; using qi::repeat; using namespace qi::labels; using boost::phoenix::construct; using boost::phoenix::at_c; using boost::phoenix::push_back; using boost::phoenix::val; using boost::phoenix::ref; using qi::space; […]

非常糟糕的boost :: lexical_cast性能

Windows XP SP3。 酷睿2双核2.0 GHz。 我发现boost :: lexical_cast性能非常慢。 希望find加快代码的方法。 在visual c ++ 2008上使用/ O2优化,并与java 1.6和python 2.6.2比较,我看到下面的结果。 整数铸造: c++: std::string s ; for(int i = 0; i < 10000000; ++i) { s = boost::lexical_cast<string>(i); } java: String s = new String(); for(int i = 0; i < 10000000; ++i) { s = new Integer(i).toString(); } python: […]

提高精神船长问题

我有助于提高精神船长的麻烦。 我需要parsing一个这样的文件: ROW int int [int, int] int [int, int] … 我能parsing它没有问题(感谢stackoverflow;)只有当我在第一个int后面添加一个'_'。 实际上,我认为船长在第一个int之后吃掉了行尾,所以第一个和第二个(在第二行)看起来只有一个int。 我不明白如何保持爱情,但吃空间。 我已经find了使用像这里和这里的自定义分析器的例子。 我试过qi :: blank,用单个规则点亮的自定义分析器('')不pipe我用什么队长,空间和eol总是吃东西。 我的语法是: 一行: struct rowType { unsigned int number; std::list<unsigned int> list; }; 完整的问题存储在一个结构中: struct problemType { unsigned int ROW; std::vector<rowType> rows; }; 行parsing器: template<typename Iterator> struct row_parser : qi::grammar<Iterator, rowType(), qi::space_type> { row_parser() : row_parser::base_type(start) { list […]