-
-
编译器技术及实现
2009年5月8日 阅读(489)如何实现一个ansi c语言的基本编译器。语法分析是指将给定的终结符串,找出从文法的开始符号推导出这个串的方法。基本上是看如何为一个串构建一个语法树。
语义分析则是指那些对应于每个产生式的动作序列,实际上就代表了这个产生式的语义动作。
-
链接器和加载器原理
2009年5月8日 阅读(487)关于链接器和加载器。主要完成重定位和符号解析。它的存在使得多文件编译称为可能,使得项目可以分割到多个文件,避免了将所以程序写到一个大文件里,一次编译。可以分别编译,然后用链接器链接起来。
看一个编译器产生的目标文件后,生成的目标文件中,包括data段,text段,bss段,同时为了链接还有重定位表,符号表,如果要支持调试还有调试信息。
-
浮点数有效数字与其表示的关系
2009年4月21日 阅读(353)转载请注明作者:phylips@bmy 出处:http://duanple.blog.163.com/blog/static/70971767200932185613881/
源自于以下问题:
float只能保证6位有效数字,那么下面的程序输出应该是多少呢?
int main()
{
float f = 0.1234567;
cout << f << endl;
cout << setprecision(7) << f << endl; -
性能分析优化及其他
2009年3月16日 阅读(245) -
qt国际化及中文编码问题
2009年3月15日 阅读(888)中文编码一直是个恼人的问题,目前还没有想到一个比较完美的解决方案。姑且先列下出现问题的时机,以及涉及到的问题及症状表述如下。
注:当前的本地化设置都是
setlocale(LC_CTYPE, "zh_CN.GB2312");
QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK")); -
正则表达式内存耗尽异常解决方案
2009年3月15日 阅读(860)前面碰到的正则表达式匹配时,产生的内存耗尽异常,大概提到两种方案,一种是给匹配建立线程,超时时把它杀死。另一种则从其根源上看,即正则表达式产生内存耗尽异常的原因是,由于匹配是个np完全问题,为了避免无限执行下去,所以实现中一般对匹配中达到的状态进行了计数,当状态达到了一定数目则抛出这个异常。
-
boost regex正则匹配的 memory exhausted
2009年3月12日 阅读(353)实际上根本原因在正则表达式写的不够简洁正确,具有歧义。
The problem here is that matching a back-reference is an NP-complete problem – Boost.Regex has a built in limiter that causes it to throw an exception rather than go on trying to find a match "for ever". Other engines just carry on regardless – so while they may find a match in this particular case (eventually), with a bit more text they might equally well hang the machine. In short, there ain’t no good solution except to rewrite your regular expression 🙁 Can’t help much there as I can’t tell what you’re trying to do from the Japanese.
-
Baidu搜索参数和页面结构(zz)
2009年3月12日 阅读(345)from:http://www.snowhack.com/blog/catalog.asp?cate=10
1、百度网页搜索的查询参数
必备参数
☆ wd–查询的关键词(Keyword)
☆ pn–显示结果的页数(Page Number)
☆ cl–搜索类型(Class),cl=3为网页搜索可选参数
☆ rn–搜索结果显示条数(Record Number),取值范围在10–100条之间,缺省设置rn=10
☆ ie–查询输入文字的编码(Input Encoding),缺省设置ie=gb2312,即为简体中文
☆ tn–提交搜索请求的来源站点
几个有用的tn
tn=baidulocal 表示百度站内搜索,返回的结果很干净,无广告干扰。比如,在百度站内搜索“快乐”,看看返回结果是不是很清爽。
tn=baiducnnic 想把百度放在框架中吗?试试这个参数就可以了,是百度为Cnnic定制的 -
google搜索引擎的参数和页面布局(zz)
2009年3月12日 阅读(469)from:http://www.snowhack.com/blog/catalog.asp?cate=10
必备参数
☆ q–查询的关键词(Query),百度对应的参数为wd
☆ hl–Google搜索的界面语言(Interface Language)
常用的有:
hl=zh-CN 简体中文语言界面,我们用的Google中文就是这个参数。
hl=zh-TW 繁体中文语言界面,港台地区常使用
-
正则表达式 元搜索应用
2009年3月12日 阅读(258)最近在用正则表达式,分析网页抽取结果的时候,碰到了一些问题,大体做个记录
1.子表达式,利用()可以抽取出,匹配的字符串中的一个字段
比如,用来抽取google的,搜索结果,可以这样写(?<=<li class=g>).*?<.*?><a.*?href="(.*?)"[^>]*?>(.*?)</a>(.*?)<br>.*?<cite>(.*?)</CITE>.*?(?=</a></span>.*?</div>)。其中里面的一些()(当然不全是,比如带问号的{?<=<li class=g>)},就是为了抽取更进一步的字段设立的,比如链接,标题,摘要等。
-
boost regex库安装使用
2009年2月14日 阅读(1,161)dev c++下安装
1.将regex编译成静态库
在dev c++下建立一个项目,选择static libray类型,然后将boost_1_37_0\libs\regex\src下的所有源代码导入到该工程,编译该工程。
将生成的regex.a改名为libregex.a,放到C:\Dev-C++\lib下,注意前缀必须是lib
设置将要使用regex的新工程的include文件路径,使其包含boost/regex.hpp
-
lex-两年前的文章了。。
2008年11月17日 阅读(1,831)2006-4-26日 星期三 凌晨1.08 作者:phylips@bmy
九点之前搞了一下关于编译原理的词法分析器的东西,使用java语言写的。搞得流程全是自己判断的。虽然之前我曾经
考虑到可以使用几种方案来实现。根据老师的要求有三种:1。手工实现2。采用LEX自动生成。3。采用老师提供的一个scanerlib 。由于那个lib使用的是C#,其实我也不知道是啥,也没看,只是听别人说的,所以便放弃了第3种方案。而第一方案侧重于程序逻 辑的编写,主意是编码。而第二种则侧重于工具的使用,以及个人学习的能力。
其实按照我的想法其实也是三种方案,跟老师的大同小异,首先我认为手工实现有两种方式,一种就是纯手工的,另一种则是充分利用java的正则表达式。由于java自1.4版本对正则表达式提供了强大的支持。所以依靠它应该完全可以解决词法分析的问题。
完全手工实现,即自己编码判断是标识符还是数字。
无论是手工实现还是采用正则表达式均需要比较大的力气,且通用性不好。
考虑到LEX的简便性,可以为广大的对编程不熟悉的人使用。
为了服务于广大贫民阶层,我对此进行了简单的研究。
本来只是知道lex是个词法分析器,可以根据定义的规则,进行分析,产生转换矩阵。
直到今天看了,才对他真正的流程有了点了解。仅做如下总结:
FLEX的工作流程如下
lex程序-〉c程序-〉编译执行c程序
可以看到,lex利用自己定义的语言(或者协议),自己进行编译,生成了C原言的源程序。在这个c的源程序里,有保存了转换矩阵信息的二维数组。
lex使用方法:
一开始的时候,直接双击FLEX.exe,但是没有反应。
1。正确的方式,为进入cmd命令行,使用flex file.l命令进行编译,才会生成了file.yy.c的c语言源代码。
2。然后将此c语言程序,使用c的编译器,编译执行即可以。
其间还碰到过如下问题:
1.由于采用了人家的源程序,有些地方导致include **.h文件找不到,而无法编译
2.直接从网页上拷贝源代码,使用flex命令出现如下错误premature EOF的错误,无法生成c的源文件
解决方法:自己重新建立文件,一个一个输入,而不要从网页上直接拷贝。估计跟采用的编码有关。
3.自己定义俄main函数,生成的c文件,编译有错误。
打开c文件:可以发现这里有两个main方法,删掉不是你定义的那个,再试一下。
下面简要介绍一下flex源程序的语法:
以下几点可以记住
1.%{ %}内的东西,直接输到生成的c文件中。
2.附加函数部分,也是直接输到生成的c文件中。
3.书写lex实际上很多一部分除了定义规则外,就是书写c语言了
4.如果要进行文件操作,需要对FILE *yyin,*yyout:为指向字符输入和结果输出文件的指针。如用户未对其定义,则设为标准输入文件stdin和stdout。
5.同时要注意识别时flex遵循两个原则:
one:规则定义在前面的优先进行匹配,这就要求关键字要写在标识符前面
two:进行最长匹配
6.有时候
如果,{a }与{a}某个规则的名称错了,最常见的是末尾加入了空格,出现如下错误提示:
EOF encountered inside an action
如果 {a}{printf("error");}而应当是{a} {printf("error");}
EOF encountered inside an action
7.出现如下警告:
8.以下可用变量:
常用全局变量和宏 -
整数溢出(zz)
2008年5月24日 阅读(484)Basic Integer Overflows
转载:xundi(xundi)Volume 0x0b, Issue 0x3c, Phile #0x0a of 0x10
|=——————–=[ Basic Integer Overflows ]=———————-=|
|=———————————————————————–=|
|=——————-=[ by blexim <blexim@hush.com> ]=——————-=| -
se的秘密(二)分析系统
2008年5月4日 阅读(349)前面的一篇已经将网页的获取这一步完成了,下面要进行的一步便是对这些网页的分析以完成索引建立。当然,有的书里把分析这一步与索引结合到一块,也是有道理的,因为分析只是一个预处理的过程,其目的便是为后面的索引服务。不过呢,我还是把它单独列出来吧,毕竟后面的索引是最为复杂的一个,估计要花很多的文字去介绍,为减少复杂度,还是首先把分析这一步介绍完毕。
-
se的秘密(一):蜘蛛传奇
2008年4月29日 阅读(365)“公元2985年,1月22日,人类迎来了历史上最为黑暗的一天。当太阳从西方落下,夜幕遮住了大地。庞大的蜘蛛军团突然从天而降,在世界的各处,人们处在睡梦中的时刻,它们展开了杀戮和逮捕,它们残忍,嗜血,反抗的人们被巨大的利爪无情的撕裂,而更多的则神秘的失踪,很快噩耗传遍了四大洋,于是人们白天处在极度的恐慌之中,而夜晚则成为蜘蛛军团肆虐的舞台。在短短的数天内,幸存的人已所剩无几,而杀戮和失踪依旧在继续,人类几千年的文明或许即将毁灭?
-
不能说的秘密-序
2008年4月28日 阅读(262)不能说的秘密是什么呢?不能说的秘密就是不能说的秘密啦,^o^,说了就不是秘密了。
ok,为了不让如此冗长的文章不至于无趣,也不至于陷入下面那位老师的尴尬的局面,先说点有趣的吧。
上面说的老师的典故是这样的,一次某位上课的老师,看着下面的学生无奈的说道:”如果后排聊天的同学能够像中间打牌的同学那样安静的话,就不会吵到前排睡觉的同学了”。。。不过有点矛盾的是,如果这位老师如此幽默的话,状况应该不止于如此悲惨吧。。。