C++
跟C++有关的一些东西
使用XPath轻松获得VC9.0工程文件包含的所有代码文件
摘要: 玩了几天空之轨迹 FC,终于快结束了。距离最后一门考试还有3天,于是把整个XPath的代码写完了。于是试用一下。
现在展示一下我那个XPath的使用方法:
1 VL_List
Result;
2 VL_XPath XPath(L"//Files//File[contains(@RelativePath,\".cpp\") or contains(@RelativePath,\".h\")]");
3 XPath.Query(Doc.GetRootElement(),Result); 第一行声明一个XML节点列表,第二行构造一个XPath,第三行将XPath作用在一个XML文档的根节点上。这个XPath用于把VC++9.0的工程文件中包含的所有.h文件和.cpp文件提取出来。虽然Files里面包含若干Filter,每一个Filter包含一些Filter和File,不过输出结果Output.xml把所有的满足要求的File节点都找了出来。
阅读全文
posted @
2008-06-28 12:55 陈梓瀚(vczh) 阅读(995) |
评论 (2) 编辑
XPath语法分析器完成!
摘要: 花了2个小时终于把XPath的数据结构和语法分析做完了。这个XPath的语法完全按照MSDN所说的做,除了减少了2个跟DTD相关的函数和11个Microsoft扩展的"ms:"开头的函数以外,剩下的功能将一概支持。
代码写完了之后,我打开MSDN找里面的几十条XPath Example进行测试,发现了一些Bug,然后修正。现在MSDN所列举的所有例子都通过了,接下来只有自己写Example进行测试了。因为MSDN的例子并没有覆盖所有等价类。
下面是运行结果和测试程序的代码:
阅读全文
posted @
2008-06-21 16:34 陈梓瀚(vczh) 阅读(1254) |
评论 (2) 编辑
做了一个XML解释器
摘要: 为了纪念自己为了明天的XML考试复习了半天,特地根据MSDN描述的标准做了一个XML的解释器。接口类似DOM和SAX的混合体。
目前什么都不支持,不过以后打算做完DTD和XPath。XSD和XSL就先算了。反正是写着玩的。把代码贴出来先。这个代码使用了自己开发的一套C++基础库。
阅读全文
posted @
2008-06-19 21:28 陈梓瀚(vczh) 阅读(1349) |
评论 (8) 编辑
做个投票,大家支持
posted @
2008-05-15 11:14 陈梓瀚(vczh) 阅读(1106) |
评论 (8) 编辑
笔试
posted @
2008-05-13 02:59 陈梓瀚(vczh)|
编辑
正则表达式——一点小插曲
摘要: 有个同学近来一直在做一个魔兽世界战况分析(名字好像叫DeusCraft),说是很火。只是用C#觉得不是很爽,想移植到C++上面来。但是那个东西在分析的时候用了好多正则表达式,于是只好找了些正则表达式引擎来测。
测试的文件一共有27万多行,首先通过一个检查时间的正则表达式。如果成功,则在接下来的20几条正则表达式中验证字符串命中哪一条,然后开始做剩余的工作。原先在C#上花了12秒分析,后来换了boost的正则表达式花费40秒,然后从MSR上找了一个号称比boost快4倍的正则表达式引擎,结果还是40秒(都是微软的,咋差距这么大……)。于是同学用他自己做的正则表达式引擎花了23秒(此数据不太记得),我用我以前那个东西花费108秒(-_-|||)。
于是我们这几天就在优化正则表达式引擎,到了今天同学那个花费13秒,我那个12秒。Visual Studio 2008 Team System上有一个Performance Wizard,用于在程序执行的过程中统计各个函数所占用的时间,可以方便定位,看出效率瓶颈,非常好用。
阅读全文
posted @
2008-05-07 21:21 陈梓瀚(vczh) 阅读(1727) |
评论 (14) 编辑
寻路算法:模仿Tower Defense Flash做了一个小游戏
摘要: 第一次用C#写游戏。在C#上写算法果然是一个挑战,时间复杂度太大的话造成的后果比C++明显好多,于是总是尽量把东西做成O(n)或者O(nlogn)。这次就在上面实现了一个寻路算法。
这个寻路算法是这样的:在16×16的方格上有一些终点,东西在格子上只能上下左右行动。每一个格子需要记录到其中一个终点的最近的路的第一个方向(就像三层循环的寻路算法一样,最后给出矩阵的那个)。
阅读全文
posted @
2008-04-30 21:29 陈梓瀚(vczh) 阅读(1435) |
评论 (2) 编辑
今天发现自己的array类太慢
摘要: Lazy Compile使用Syngram动态创建语法分析器的代码实在是太慢了,debug竟然需要8秒钟来处理91条比较长的文法。于是我打开了Visual Studio 2008的Performance Wizard查看运行时消耗的资源,结果发现竟然都消耗在自己那个array类的operator[]里面了。那一段代码是用来检查文法的左递归引用关系是否出现环的。结果就把用到的四个array全部换成bool*了,当时只是为了创建二维数组方便使用了array类。
过后,debug的时间立刻降为2秒钟不到,于是我又打开Performance Wizard看了一次,这次消耗的瓶颈终于转移到一个合理的地方了。
结果:array竟然比指针慢了无穷多倍,得找个时候重新写一次。不过这段代码好象是去年写的,也没经过什么性能测试,也难怪发现不了问题。在此帖上代码,等Lazy Script写完了重新审查一下自己的那套模板库(NTL,Non-standard Template Library,娃哈哈)。
阅读全文
posted @
2008-04-28 11:53 陈梓瀚(vczh) 阅读(1390) |
评论 (4) 编辑