自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (3)
  • 收藏
  • 关注

原创 extern “C” const __declspec(selectany)

<br />extern“C” const __declspec(selectany)<br />在微软有一段定义<br />DEFINE_GUID(name,l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) /<br />    extern “C” const GUID  __declspec(selectany) name / <br />         … …<br />为什么要用Extern “C” const__declspec(selectan

2010-12-20 17:12:00 1330

原创 手工打造编译器之语义分析2

写语义分析的时候思路是清晰的,因为你能清晰的知道语义分析是干什么的,知道它的内部实现是什么样的。而它的内部实现没有用到什么特殊的没有见过的算法。不像语法分析,一个语法分析的引擎就让人很是头疼,它是一个让人陌生的名词,它能根据你的语法描述就能生成一个有限自动机,然后根据这个有限自动机判断程序是否有语法错误,这个过程就是一个很神奇很困难的过程。当然啦,当你实现了它之后回头看,有一种在山顶上回头望的感觉,这种感觉也只有撸起袖子干了之后才知道。扯了这么多语法分析,现在回过头来把但是写完。写语义分析的时候思路是清晰的

2010-12-19 17:46:00 741

原创 手工打造编译器之语义分析1

3 语义分析语义分析阶段的任务是:将变量的定义与它们的各个使用联系起来,检查每一个表达式是否有正确的类型,并将抽象语法变为更简单的更适合生成机器代码的表示。3.1 符号表符号表是绑定的集合。这些绑定是标识符与其含义的一种映射关系。因为作用域的改变,符号表也随之改变。如下面的c语言struct M {static int a = 5;struct N{static int b = 10;static char a;}}上面代码的符号表可能为:T1 = {a--àint}T2= { b--àint, a--àc

2010-12-19 17:31:00 646

原创 运算符new和delete的重载

    在学习c++的时候,我们知道new和delete可以重载,但是它们有什么用呢?    在我写语义分析的时候遇到一个问题,有一些很碎的内存被new出来,不知道在哪delete(因为它要往上一级一级的传),不知道该怎么delete(应为转化为void*类型了)。还有就是当你中间发现语义错误,退出语义分析的时候,有一大堆内存还没有被delete呢。这些内存的delete都让人头痛。    但是有了重载这个东西,我就可以集中分配,语义分析结束集中delete,在中间可以delete,也可以不delete,这

2010-12-09 23:57:00 643

原创 手工打造编译器之语法分析器3

<br />     没想到写了快两个月的东西讲起来就是轻飘飘的两页。大概每天写了两个小时,代码我大概统计下有3000行到4000行之间。<br />     复杂的地方在计算first,follow集合;LR分析引擎;文法这几部分。没写完一部分我都做了充分的测试,这些都是最终一气呵成,很少修改以前代码的原因。语法分析结束我也做了很多的测试,结果很满意,没想到根据LR分析引擎,绕到状态里面又绕出来到语法分析树上。状态比较抽象,而到语法分析树就清晰了。估计yacc之类的也做了类似的工作。一想到和yacc,甚至

2010-11-28 11:17:00 737

原创 手工打造编译器之语法分析器2

2.2 LR分析引擎<br />LR分析引擎是一种有限自动机。根据该自动机,可以通过当前状态和下一个字符,得到下一步的动作。LR分析引擎超前查看一个字符,做出判断。2.2.1 LR分析引擎的算法<br />详见书中介绍2.3 抽象语法树<br />抽象语法树起了在语法分析和编译器之间建立清晰接口的作用。(a),它解决所有语法分析的问题;(b),它给下一步语义分析做了很好的描述。<br />例如:<br />{a :=  5; a+1;}<br />上句的抽象语法树为<br />A_seqExp(<br />

2010-11-28 10:56:00 808

原创 手工打造编译器之语法分析器1

2.语法分析 <br />语法分析:分析程序的短语结构2.1 文法<br />文法描述一种语言。文法是如下产生式(production)的集合:<br />Symbolàsymbol,…,symbol<br />出现在左部的符号是非终结符(Nonterminate),出现在右部的排除掉非终结符就是终结符(terminate)。2.1.1 文法的预测分析<br />计算first,follow,nullable集合,算法见书中描述。2.1.2 文法的种类<br />文法有很多中。大致分为无二义性文法和二义性文

2010-11-28 10:55:00 928

原创 const的规律

    const int *p =...这个大家都遇到。但是const int**pp?? int*cost*?呢?是不是傻眼了?看看我做的实验,比所有教科书上的东西都一目了然。我的环境是vs2003.net,yes表示编译运行没问题,no反之。有了这个表,规律还是比较好找的。对于int**const**ppcpp,也是举一反三的事。**pp=NULL*pp=NULLPp=NULLInt **ppn;yesYesYesConst Int**cppn;noNoNoInt*const*pcpn;yesNoNo

2010-10-10 21:19:00 419

原创 手工打造编译器之词法分析器3

1.6.1  生成逆波兰表达式<br />逆波兰表达式,可以去除括号(),建立适合计算机处理的表达式,该表达式有正确的运算优先级。<br />正常的表达式逆波兰表达式<br />a+b ---> a,b,+ <br />a+(b-c) ---> a,b,c,-,+ <br />a+(b-c)*d ---> a,b,c,-,d,*,+ <br />a+d*(b-c)--->a,d,b,c,-,*,+ <br />a=1+3 ---> a=1,3 +<br />运算的时候,遇到可以归并的就归并计算。如5+(4-

2010-10-04 16:28:00 597

原创 手工打造编译器之词法分析2

1.5 正则表达式和有限自动机<br />有限自动机是状态的集合以及连接这些状态的边,边上的权值是转化的条件。每个有限自动机有初态和终态。典型的有限自动机如下图<br />  <br />初态为蓝色,终态为红色.<br />正则表达式和有限自动机是一一对应的,而且有限自动机易于编程实现,所以判断一个字符串是否符合某个正则表达式可以用有限自动机来判断。1.6  正则表达式向有限自动机的转换<br />Step 1:去掉特殊符号'.','-','\'。这些符号用字符集合代替,如a-z,转化为从a到z的字符集合。

2010-10-04 16:26:00 441

原创 手工打造编译器之词法分析1

1 词法分析<br />(也想过用flex等等,下载了,用cygwin安装了,但是我是微软操作系统,不知道怎样掉它的接口,<br />所以就算了。然后仔细想想,写出来一个很简单的,复杂在正则表达式,墨迹了两三个礼拜还是墨迹<br />出来了,那就自己写吧。。。)<br />将输入分解为一个个单独的词法符号。<br />这些符号包括:<br />Tiger语言的保留字,while,for, to, break,let,in,end,function,var,type,array,if,<br />then,e

2010-10-04 16:19:00 519

原创 手工打造编译器序

武汉一高校的两名大一新生,制造出一辆时速可达90公里的简易汽车。这是一则新闻,当你看到这个新闻你会有什么感受呢?傻逼?佩服?或者已经麻木了。我不想做一个代码工人,不想让工作扼杀了我的兴趣,我有着创作的欲望,有着打造自己的东西的欲望。当然我写的编译器肯定是狗屁不如,比不上你见过的任何一个编译器,自己定义了很多的限制,而且由于缺乏测试,错误一大堆。      但是我依然会享受这个过程。我把一个个或朴实无华或者设计精巧的算法变成代码,去解决实际的问题,然后花几天时间去调试bug,当结果奇迹般地出现的时候,我能体会

2010-10-04 16:13:00 446

原创 poj 1173 具有重复的组合和容斥原理

题目描述计算BC(n,k,m),就是X1+X2+...+Xk=n,其中1详见http://acm.pku.edu.cn/JudgeOnline/problem?id=1173。如BC(7,4,2),有16个解0: 1000100  |  8: 11001001: 1000110  |  9: 11001102: 1001000  | 10: 11010003: 1001100  | 11: 11011004: 1001110  | 12: 11011105: 1011000  | 13: 11100106:

2010-08-12 00:04:00 1913

原创 poj 1147 BWT压缩方法

<br />题目描述<br />问题源自BWT压缩方法。详见http://acm.pku.edu.cn/JudgeOnline/problem?id=1147。<br />该问题就是BWT压缩方法的逆过程。关于BWT压缩方法见http://en.wikipedia.org/wiki/Burrows%E2%80%93Wheeler_transform。<br /> <br />解题过程<br />有的时候感觉智商不够用。如果没有答案估计我是想不出答案了。<br />我解题过程写了3套代码。<br />第一套代

2010-08-01 23:55:00 996

原创 poj 1480 如何用程序实现m^n

<br />问题描述<br />见http://acm.pku.edu.cn/JudgeOnline/problem?id=1480<br /> <br />问题分析<br />暴力法,从只需2两步到需要10步往下分析,每一步从 ADD, SUB, MUL, DIV and DUP任选一个。那么第i(2<=i<=10)步的时候,运算量是5^i。这个是不能用for做的,想要写m^n还得用函数的递归实现。<br /> <br />代码<br />#include <cstdio>#include <cmat

2010-07-31 10:43:00 618

原创 poj 1456 贪婪方法的证明

题目描述<br />输入:n个物品,它们的价值和它们的dead line,就是在deadline之后不能再卖掉它。而且单位时间只能卖一件物品。<br />输出:最多获利多少。例如输入:4  50 2  10 1   20 2   30 1输出:80<br />在第一段时间卖掉最后一个,获得30,然后在第二段时间之前卖掉第一个,获利50,共课获利80.<br />详情请见file:///F:/problems_2/1456%20--%20Supermarket.mht<br /> <br />贪婪方法的证明<

2010-07-27 00:40:00 596

原创 poj 1386 有向图中的欧拉迹

<br />问题描述<br />http://acm.pku.edu.cn/JudgeOnline/problem?id=1386<br />这个题题意是给你一组单词,要判断是否能够构成一个<br />首尾相接的单词链,例如给出如下单词:<br />3acmmalformmouse就可以构成 acm->malform->mous的单词链。<br />问题分析<br />这种题实际上就是判断有向图的欧拉迹的存在性。<br />什么是欧拉迹?就是一个图的所有边在迹中出现且只出现一次。通俗的说就是每条边只走一次把

2010-07-24 21:55:00 1268

原创 poj 1363

继续水题。题目描述一个栈,给定一串数[n1,n2,n3,...],入栈顺序是自然序列1,2,3,。。。,然后判断是否能出栈顺序达到[n1,n2,n3,...]。若能,输出yes,否则输出no。http://acm.pku.edu.cn/JudgeOnline/problem?id=1363思路真是写个栈模拟,多注意细节即可#include #include #include using namespace std;#define M 4096struct MyStack {

2010-06-29 23:00:00 534 1

原创 poj 1338

水题一枚。问题描述:file:///F:/problems_2/1338%20--%20Ugly%20Numbers.mhtDescriptionUgly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, ... shows the first 10 ugly numbers. By convention, 1 is included. Given

2010-06-27 18:09:00 577 1

原创 开博拉

开个博,把自己想法记下来。面试的时候会遇到一些问题,比如你职业规划是什么?你想要在什么样的公司工作?这些问题都是基本问题,但是我都被问懵了。事后想想,对于这些问题,平时都有思考,但是你没有清晰的把他们表达出来,所以你的思路不够清晰,所以你就会被问懵了。如果我在面试之前和一个人探讨过这个问题,我肯定会说个一二三来。所以呢,开个博,把自己经常想到的一些模糊的思考记录下来。当然啦,大话空话唧唧歪歪我是很反感的,我会多发发技术贴的。

2010-06-27 17:57:00 375 2

【全美经典】数值分析(第二版)清晰版pdf

嘿嘿,这年头谁和数值分析过不去呀。学就学经典的,让全美经典的数值分析帮助你。

2009-08-19

OpenGL.Shading.Language.2nd.Edition

opengl的入门经典教程。反正我当年就用它入门的。

2009-08-19

GPU_Programming_Guide_Chinese

很经典的东东。学习GPU Programming的上佳材料,在公司内部广为流传。

2008-11-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除