草庐IT

c++ - SQL 解析器库 - 从查询中获取表名

我正在寻找一个C/C++SQL解析库,它能够为我提供查询所依赖的表的名称。我的期望:SELECT*FROMTABLEANATURALJOINTABLEB结果:TABLEA、TABLEB当然提供的例子非常简单。我已经编写了自己的解析器(基于Boost.Spirit)来处理SQL语法的一个子集,但我需要的是一个能够处理复杂(递归等)查询的解析器。你知道什么对此有用吗?我找到的是http://www.sqlparser.com-它是商业的,但正是我需要的。我还深入研究了PostgreSQL源代码,但没有效果。 最佳答案 Antlr可以为您

c++ - 在 C++ 中解析 PDB 文件以收集变量名称

谁能建议一种用C++解析PDB文件的方法?我需要访问变量名称,特别是返回的变量名称。谢谢 最佳答案 PDB文件的实际格式在Microsoft之外没有记录。幸运的是,有一个出色的受支持DLL可用于从中读取信息:http://msdn.microsoft.com/en-us/library/windows/desktop/ms679267(v=vs.85).aspx 关于c++-在C++中解析PDB文件以收集变量名称,我们在StackOverflow上找到一个类似的问题:

c++ - gcc 与 clang : noexcept parsed in unused template specialization when static casting

我正在尝试将函数指针静态转换为特定函数重载,但似乎clang仍会解析(未使用的)模板特化的noexcept语句,从而生成编译器错误。如果未使用相应的函数重载,GCC似乎并不关心noexcept。templatevoidfun(T)noexcept(T(1)){}voidfun(int){}voidfun(int*){}intmain(){inta;fun(&a);//callingworksfinefun(a);static_cast(&fun);//staticcastingdoesn't}https://godbolt.org/z/ixpl3f这里是哪个编译器出错了?当将函数指针转

c++ - boost::未排序模式的精神语法

我有一个模型的模式部分需要解析。假设它看起来像下面这样。{type="Standard";hostname="x.y.z";port="123";}属性是:元素可能显示为无序。所有属于架构一部分的元素都必须出现,不能有其他元素。所有元素的综合属性都放入一个结构中。(可选)模式在未来可能取决于类型字段——即,基于类型的不同字段——但我目前并不关心这一点。 最佳答案 根据Sprite论坛,答案如下。Youmightwanttohavealookatthepermutationparser:a^b^cWhichmatchesaorborc

c++ - 使用 C++ 进行简单的自定义解析

我已经阅读SO一段时间了,但我真的找不到任何帮助解决我的问题的方法。我有一个创建IAS模拟器的C++任务。这是一些示例代码...01a12b2c3110begin11.loada,subtractbandoffsetby-1forjump+11loadM(0)12subM(1)13subM(3)14halt使用C++,我需要能够读取这些行并将它们存储在我已经构建的“内存寄存器”类中...例如,第一行需要在寄存器零中存储“1a”。如何解析出行首的数字,然后将其余部分存储为字符串?我使用一个类来设置存储,该类使用mem.set(int,string);调用。int是行首的内存位置,stri

c++ - 具有 XPath 和宽字符支持的最轻量级 XML 解析器

我想要一个轻量级的C++XML解析器/DOM:可以将UTF-8作为输入,并解析为UTF-16。也许它直接执行此操作(理想!),或者它可能为转换提供一个Hook(例如采用自定义流对象在解析之前执行转换)。提供一些XPath支持。我一直在看RapidXML,KranfxmlParser,和pugiXML.前两个可能通过钩子(Hook)允许需求#1。第三,pugiXML,支持#2要求。但是这三个都不满足这两个要求。可以满足这两种要求的最小(免费)库是什么? 最佳答案 pugixml有一个UNICODEbranch.估计下个版本(0.6)会

c++ - 有没有办法使用 boost::program_options::parse_config_file 在 INI 文件中包含多个 "name=value"行?

我希望能够使用boost::program_options在INI文件中指定多个name=value行。有点像[list.names]name=valuename=value2name=value3有没有办法用boost::program_options实现这个?如果我尝试它,我会得到一个多次出现的错误如果没有,还有哪些其他库可用? 最佳答案 指定字段的值为std::vector在options_description:namespacepo=boost::program_options;po::options_descriptio

c++ - 提神气 : How to report parser warnings?

如何报告解析器警告?类似于报告错误,但解析器不能停止。仅记录警告消息和引起警告的子表达式。示例输入:select*fromtablewhererow>=''&&row'hello'预期输出:Warning:expressionisalwaystrue:row>=''Warning:&&isdeprecated,useAND:row>=''&&row'hello'Warning:isdeprecated,use!=:row'hello' 最佳答案 如果你想继续解析你可以像以前一样注册一个错误处理程序,除了你必须指定accept作为处理

c++ - 解析 double 的普通 python 列表

解析这样一行的最佳方法是什么(元素数量不固定):[0.0125,2.9518e+02,1.2833e+00,-3.5302e-04,1.2095e+01,1.0858e-01,1.2112e-04,1.1276e+03]#comments在C++中获取double的std::vector?我已经这样做了:vectorread_line(stringline){vectorcoefficients_line;//eraseallbefore[andallafter]size_tfound1=line.find("[");if(found1==string::npos)cerrcoeffi

c++ - 如何将 char 数组解析为整数?

我有一个像这样的char数组的缓冲区:charbuf[4];buf[0]=0x82;buf[1]=0x7e;buf[2]=0x01;buf[3]=0x00;我现在想将char2和3一起读取为bigendian中的16位无符号整数。如何使用C(++)标准工具执行此操作?目前我只会知道手动解决方案:intlength=but[3];length+=but[2]这对于16位整数来说很容易,但我还需要解析32位整数,这会使事情变得有点困难。那么标准库中是否有一个函数可以为我做这件事?博多 最佳答案 您可以使用ntohs和ntohl(在小端系