2011年7月31日

【转】Vczh Library++ 3.0之可配置语法分析器(设计文法表达式)

摘要: 从网上无意间看到这个系列的文章,作者非常有想法,转下来慢慢研究,好好学习。 祝大家学习愉快,做自己的爱好 ^_^ ! 上一篇文章中我们看到了可配置语法分析器使用起来的样子,在这篇文章中我将告诉大家如何通过重载操作符的方法构造文法表达式树,从而使用递归向下法进行语法分析的工作。 在这之前我们将研究一下什么是文法表达式。我们将文法表达式看成分析器,于是复杂的文法表达式就是由简单的分析器通过各种方法组合起来的复杂分析器。一个分析器有以下几个属性: 1:输入类型。输入类型通常是一个字符串的指针还是迭代器什么的,具体类型不重要,重要的是输入状态必须能被复制,能跳到下一个元素。当然wchar_t*也满足这 阅读全文

posted @ 2011-07-31 12:16 xuangong 阅读(224) 评论(0) 推荐(0)

【转】Vczh Library++3.0之可配置语法分析器(分析Demo:函数式宏)

摘要: 从网上无意间看到这个系列的文章,作者非常有想法,转下来慢慢研究,好好学习。 祝大家学习愉快,做自己的爱好 ^_^ ! 上一篇文章提到了我开发了可配置语法分析器之后做了一个FpMacro用来生成C++有规律的代码。这一篇文章就从FpMacro入手,分析可配置语法分析器所需要具备的功能。首先让我们来了解一下什么是FpMacro。 FpMacro主要用来产生用C++宏很难容易产生的代码(譬如BOOST那个宏)。当你需要重复产生一些区别很小但是又不能用模板解决的代码的时候,用宏就不是一个好的选择,因为这种宏对于输入的东西都有很多限制。譬如说因为宏展开的顺序的问题,你把另一个宏当成高阶函数传进去,过不了 阅读全文

posted @ 2011-07-31 12:13 xuangong 阅读(329) 评论(0) 推荐(0)

【转】Vczh Library++3.0之可配置语法分析器(前言)

摘要: 从网上无意间看到这个系列的文章,作者非常有想法,转下来慢慢研究,好好学习。 祝大家学习愉快,做自己的爱好 ^_^ ! 花了差不多两个星期的时间将一个可配置语法分析器(Combinator)写好了。这个语法分析器被设计来完成以下任务: 1、易于使用,并且在运行时可更改 2、提供对分析字符串和容器的支持 3、可使用正则表达式辅助定义分析器 4、如果觉得预定义的设备不满意,用户可以自行提供新的文法元素(譬如说增加一种使用通配符进行语法分析的元素) 5、提供可配置错误恢复策略,提供合理的错误发生位置信息,用户可根据自己的意愿来决定错误信息的内容。 不过直接写这玩意儿怎么开发出来的比较枯燥,所以这里我准 阅读全文

posted @ 2011-07-31 12:09 xuangong 阅读(264) 评论(0) 推荐(0)

简述C和C++的学习历程(转)

摘要: ——by:肖舸老师总是被同学们问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复。一家之言,欢迎拍砖哈。1、可以考虑先学习C。大多数时候,我们学习语言的目的,不是为了成为一个语言专家,而是希望成为一个解决问题的专家。做一个有用的程序员,做一个赚钱的程序员。我们的价值,将体现在客户价值上,而不是语言写得好不好看。C++是C的一个面向对象的解释,C++为C扩充了大规模工程应用,复杂的系统结构的组织和掌控方法,但是,我认为,C++骨子里还是C的。毕竟,解决具体问题,每个函数内部,都是用C的方式写程序,还是面向过程的。因此,想要学习好C++,我的建议,先学习C,先学解决问题. 阅读全文

posted @ 2011-07-31 08:57 xuangong 阅读(365) 评论(0) 推荐(2)

一些比较重要的算法(转)

摘要: 下面是一些比较重要的算法,原文罗列了32个,但我觉得有很多是数论里的,和计算机的不相干,所以没有选取。下面的这些,有的我们经常在用,有的基本不用。有的很常见,有的很偏。不过了解一下也是好事。也欢迎你留下你觉得有意义的算法。(注:本篇文章并非翻译,其中的算法描述大部份摘自Wikipedia,因为维基百科描述的很专业了)A*搜寻算法俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。该算法像Dijkstra算法一样,可以找到一条最短路径;也像BFS一样,进行启发式的搜索。Beam Search束搜索(beam 阅读全文

posted @ 2011-07-31 08:51 xuangong 阅读(180) 评论(0) 推荐(0)

用汇编的思路理解VC++函数调用(转)

摘要: 空程序:int main(){00411360 push ebp ;压入ebp00411361 mov ebp,esp ;ebp = esp,保留esp,待函数调用完再恢复,因为函数调用中肯定会用到esp.00411363 sub esp,0C0h ;esp-=0C0h(192);为该函数留出临时存储区;将其他指针或寄存器中的值入栈,以便在函数中使用这些寄存器。00411369 push ebx ;压入ebx0041136A push esi ;压入esi0041136B push edi ;压入edi0041136C lea edi,[ebp-0C0h] ;读入[ebp-0C0h]有效地址, 阅读全文

posted @ 2011-07-31 08:35 xuangong 阅读(414) 评论(0) 推荐(0)

2011年7月30日

C++虚函数表解析(转)

摘要: C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,. 阅读全文

posted @ 2011-07-30 20:23 xuangong 阅读(198) 评论(0) 推荐(0)

VC++中为何在每个CPP文件中必须要加入StdAfx.h头文件

摘要: 首先,与StdAfx.h对应的还有一个StdAfx.cpp文件,他们的目的是一次编译,生成一个projectname.pch这样的一个预编译头文件,将其用于工程中所有的cpp文件,这样的话,如果工程中的某个cpp文件需要引用头文件的话,则只需要去引用预编译pch文件即可,无需引入头文件,从而避免了重新编译头文件的麻烦,由于MFC系统的头文件比较巨大,如果每个CPP都重新编译一遍头文件,将浪费过多的编译时间,故这种做法能大大加快编译速度。其次,这就要求每个CPP如果要使用预编译头文件projectname.pch加快编译速度的话,VC默认的方式是通过在文件的中加入StdAfx.h的方法来告知编. 阅读全文

posted @ 2011-07-30 19:57 xuangong 阅读(791) 评论(0) 推荐(0)

c与c++程序连接问题 (转)

摘要: 它们之间的连接问题主要是因为c\c++编绎器对函数名译码的方式不能所引起的,考虑下面两个函数/* c*/int strlen(char* string){ ... }//c++int strlen(char* string){ ... }两个函数完全一样。在c在函数是通过函数名来识别的,而在C++中,由于存在函数的重载问题,函数的识别方式通函数名,函数的返回类型,函数参数列表三者组合来完成的。因此上面两个相同的函数,经过C,C++编绎后会产生完全不同的名字。所以,如果把一个用c编绎器编绎的目标代码和一个用C++编绎器编绎的目标代码进行连接,就会出现连接失败的错误。解决的方法是使用extern 阅读全文

posted @ 2011-07-30 19:53 xuangong 阅读(633) 评论(0) 推荐(0)

定制Vim for C++

摘要: 弄了台二手电脑改装下装上centos,当成公共的服务器使用,我就开始折腾Vim了,从网上找找资料动手干。世界上的程序员分三种,一种是用Emacs,一种是用Vim的,其它的归为第 三种。在编写C/C++的程序时,只用Vim自身的功能还是不太爽的, 还需要其它的插件,将其构造成一个比VC爽得多的IDE。由于每个工具介绍清楚都不是一两句话说得完的,以下只列出插件的名称,具体的内容google之 即可。其中vim插件可以到VIMer最常去的www.vim.org下载。安装Vim/非Vim插件Ctags,非vim插件。Ctags是Vim必不可少的工具,它可以将C/C++的宏、变量、函数、类等一系列信息. 阅读全文

posted @ 2011-07-30 15:42 xuangong 阅读(1544) 评论(0) 推荐(0)

导航