s******u 发帖数: 501 | 1 百分之百legal的C++程序,看你能不能理解这是在说什么
name = fhicl::ass [ _val = qi::_1 ];
qualname = fhicl::ass [ _val = qi::_1 ]
>> *((char_('.') > fhicl::ass) [ _val += qi::_1 +
qi::_2 ]
| (char_('[') > fhicl::uint > char_(']')) [ _val += qi::_1
+ qi::_2 + qi::_3]
); // TODO: only some whitespace permitted
// TODO: no whitespace permitted
localref = lit("@local::") > qualname [ _val = qi::_1 ];
dbref = lit("@db::") > qualname [ _val = qi::_1 ];
// Can't use simple, "list context" due to the possibility of one of
// the list elements actually returning multiple elements.
sequence =
lit('[')
> -(((value [ phx::bind(seq_insert_value, qi::_1, _val) ]) | (iter_pos >
> lit("@sequence::") > qualname) [ phx::bind(&seq_insert_sequence,
qi::_2, ref(tbl), ref(in_prolog), _val, qi::_1, s) ]))
> *(lit(',') > ((value [ phx::bind(seq_insert_value, qi::_1, _val) ]) |
(iter_pos >> lit("@sequence::") > qualname) [ phx::bind(&seq_insert_sequence
, qi::_2, ref(tbl), ref(in_prolog), _val, qi::_1, s) ]))
> lit(']');
table =
lit('{')
> *((name >> (lit(':') >> value)
) [ phx::bind(map_insert, qi::_1, qi::_2, _val) ]
| (name >> (lit(':') > lit("@erase"))
) [ phx::bind(map_erase, qi::_1, _val) ]
| (iter_pos >> lit("@table::") > qualname
) [ phx::bind(&insert_table,
qi::_2, ref(tbl), ref(in_prolog), _val,
qi::_1, s) ]
)
> lit('}'); |
h******k 发帖数: 810 | 2 STL随便抄一段也能把人看晕了。这算优点吗?java.util.Collections相比起来容易懂
多了。 |
s******u 发帖数: 501 | 3 看STL绕是因为很难理解某些代码的目的是什么,有大量的corner case和subtlties要
处理,但至少你知道是在看C++的程序,上面那段直接让我对C++语法的基本理解产生了
严重的怀疑
【在 h******k 的大作中提到】 : STL随便抄一段也能把人看晕了。这算优点吗?java.util.Collections相比起来容易懂 : 多了。
|
p***o 发帖数: 1252 | 4 典型的滥用操作符重载,哈哈。不过你要是看过boost spirit也没啥。
【在 s******u 的大作中提到】 : 看STL绕是因为很难理解某些代码的目的是什么,有大量的corner case和subtlties要 : 处理,但至少你知道是在看C++的程序,上面那段直接让我对C++语法的基本理解产生了 : 严重的怀疑
|
s******u 发帖数: 501 | 5 这个就是拿boost spirit写的一个简单parser,呵呵
话说spirit是我见过的最变态的一个库,写错一个字编译出错信息有1000页
也难怪C++被人黑,实在是太不友好了
【在 p***o 的大作中提到】 : 典型的滥用操作符重载,哈哈。不过你要是看过boost spirit也没啥。
|
p***o 发帖数: 1252 | 6 这种都算DSL了,有了Domain Knowledge,比如编译原理,看起来也还好。
出错信息C++也在加新特性改进。
【在 s******u 的大作中提到】 : 这个就是拿boost spirit写的一个简单parser,呵呵 : 话说spirit是我见过的最变态的一个库,写错一个字编译出错信息有1000页 : 也难怪C++被人黑,实在是太不友好了
|
j******o 发帖数: 4219 | 7 工具是为了让人用起来简单而存在的,不是为了炫耀华丽。 |
k*******d 发帖数: 1340 | 8 这种code一般不会出现在production 里面把,比STL还难懂。
STL其实不是太难懂,熟悉了一些template的套路即可,算法还是很straight forward
的 |
t*****n 发帖数: 4908 | 9 STL就相当于gre里面的阅读。正常人是不会写这样的文章的。所以lz的代码基本就是自
虐。
forward
【在 k*******d 的大作中提到】 : 这种code一般不会出现在production 里面把,比STL还难懂。 : STL其实不是太难懂,熟悉了一些template的套路即可,算法还是很straight forward : 的
|
s******u 发帖数: 501 | 10 boost spirit用现有的C++语法和工具几乎完美的模拟了EBNF notation。虽然用一个
general purpose language来做一个domain specific language该做的事情是不是合适
本身也有点争议,但是不能否认的是C++有足够的灵活性让他能够担任DSL的功能--很少
有其他的语言能够做到这一点。
另外不要因为你不熟悉或者不理解就简单地下结论说这不是正常人写的,只是你没到这
水平而已
【在 t*****n 的大作中提到】 : STL就相当于gre里面的阅读。正常人是不会写这样的文章的。所以lz的代码基本就是自 : 虐。 : : forward
|
n*****t 发帖数: 22014 | 11 这 naming,ass,真尼玛传神了
+
_1
【在 s******u 的大作中提到】 : 百分之百legal的C++程序,看你能不能理解这是在说什么 : name = fhicl::ass [ _val = qi::_1 ]; : qualname = fhicl::ass [ _val = qi::_1 ] : >> *((char_('.') > fhicl::ass) [ _val += qi::_1 + : qi::_2 ] : | (char_('[') > fhicl::uint > char_(']')) [ _val += qi::_1 : + qi::_2 + qi::_3] : ); // TODO: only some whitespace permitted : // TODO: no whitespace permitted : localref = lit("@local::") > qualname [ _val = qi::_1 ];
|
s******u 发帖数: 501 | 12 alphabetic started string => ass 哈哈
【在 n*****t 的大作中提到】 : 这 naming,ass,真尼玛传神了 : : + : _1
|