上一页 1 ··· 171 172 173 174 175 176 177 178 179 ··· 191 下一页
摘要: 在C语言里,指针是最灵活的数据类型,它具有低级语言的特点,高效快速,不过学会它就不是那么容易了。由于指针是直接面向机器的,也就是它是指向内存的地址,因此使用C来编写嵌入式软件,或者操作系统的软件是比较合适的选择。下面就来看例子里的指针语句,如下:typedef char * va_list;上面这句声明了va_list为char的指针类型的别名,那么在LCC里又是怎么样处理它的呢?先识别typedef出来,接着就调函数decl(dclglobal),然后调用函数specifier来处理。在函数specifier里:#001//说明#002static Type specifier(int *s 阅读全文
posted @ 2007-05-23 22:54 ajuanabc 阅读(211) 评论(0) 推荐(0) 编辑
摘要: 想到多年前google刚刚在国内有点名气的时候,我和我同学用的最多的google搜索和新浪的分类。分类因为不方便和资料不够齐全的关系被放弃了。google刚开始还是不错的,后来发现一个极为不爽的地方:点击搜索结果不是新窗口打开,这样我每次都要按着shift让它在新窗口打开或者每次后退。后来google改变了这个“缺点”,但是最近居然又再次出现。让我不得不多使用他的对手之一baidu.人们常说或者听说细节决定成败。或者这个是我的一个要求并不适合大多数的人。至少,我放弃了google,或者说不是第一首选了。PS,最近诺顿误杀事件影响很大,CCTV已经N次报道了。搞不清楚诺顿公司是怎么想的,他不怕影 阅读全文
posted @ 2007-05-23 12:11 ajuanabc 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 语法分析是比较复杂的处理,下面再来分析一个例子,它的代码如下:typedef unsigned short wchar_t;typedef wchar_t wint_t;第一句语句在LCC里的处理,前面已经解释清楚,主要生成wchar_t保存符号表里,并且记录这个ID的类型属性。那么第二句是怎么样通过上面的函数来分析的呢?接下来就去分析C编译器怎么处理它。与第一句语句一样,先识别typedef出来,接着就调函数decl(dclglobal),然后调用函数specifier来处理。在函数specifier里:#001//说明#002static Type specifier(int *sclas 阅读全文
posted @ 2007-05-22 22:10 ajuanabc 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 看到淘宝上的一个效果不错。存了一个,最后整理代码如下:<STYLE type=text/css media=screen>DIV#PreviewBox {DISPLAY: none; PADDING-LEFT: 6px; Z-INDEX: 2006; POSITION: absolute}DIV#PreviewBox SPAN {BACKGROUND: url(http://img.taobao.com/2k6/sys/list/arrow.gif) no-repeat 0px 0px; LEFT: 0px; WIDTH: 7px; POSITION: absolute; TOP: 阅读全文
posted @ 2007-05-22 12:10 ajuanabc 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 把下面的19X19的图片设置它的style="margin-bottom:-5px" 这样文字和图片就居中了,这个值随着图片的大小不同而改变。td中<img src="image/ball.jpg" style="margin-bottom:-8px"><a href="index.asp" class="menu">Home</a> 阅读全文
posted @ 2007-05-22 00:10 ajuanabc 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 前一次已经分析了声明的函数,但还有一个声明函数没有分析的,它就是dclr函数,这个函数是大内总管,分别调用前面两个声明函数来处理所有的声明语句,接着又会保存声明的ID和属性到符号表,当然它需要调用处理函数定义的函数,接着在那里把函数生成汇编代码并写到输出文件里。现在就来看代码:#001static void decl(Symbol (*dcl)(int, char *, Type, Coordinate *)) #002{#003int sclass;#004Type ty, ty1;#005static char stop[] = { CHAR, STATIC, ID, 0 };#006#0 阅读全文
posted @ 2007-05-21 22:31 ajuanabc 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 上一次把声明的说明符已经分析得很清楚,也就是把C的变量和函数声明都已经了解了。最后还剩下一个问题没有解决,这个问题就是声明后面的ID是变量呢?还是函数?或者是指针?为了识别后面的ID,下面来看一个例子。如下的语句:typedef unsigned int size_t;这是第一行处理的代码,它通过函数specifier处理后,已经就把typedef、unsigned、int处理完成,还剩下size_t没有处理。从函数返回specifier后,接着几次递归调用才把它处理完成,现在就来看看分析这句语句的函数调用关系。如下所示:#001program#002decl(dclglobal)#003 s 阅读全文
posted @ 2007-05-20 13:15 ajuanabc 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 在语法分析里,最主要的组成部份是声明分析,并且这是C语言编译器最复杂的组成部分。由于任何变量都需要声明,那么怎么样知道这个变量声明是合法的呢?现在带着这个问题去分下面的代码。为了理解代码的工作,先来看前面的例子里的第一行有效代码:typedef unsigned int size_t;在这句语句里,使用类型定义关键字来声明了一个无符号整数的类型size_t,为了识别这句语句的语法,那么最开始的是类型关键字,它相当于存储类型。接着是无符号、整型,最后才是标识ID。其实上面这句语句也可能有这种形式,如下:typedef int size_t;那么上面这句就上面那句少了一个无符号的说明。要分析这种声 阅读全文
posted @ 2007-05-19 23:26 ajuanabc 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 准备好词法分析之后,接着的工作就是检查源程序是否合法,以及源程序表达的意思是什么。这两个问题就是语法和语义的分析,也就是把源程序里所包含的属性分析出来,并保存到符号表里。下面就来仔细地分析LCC编译器是怎么样处理这两个问题的。#001t = gettok();#002#003//调用后端代码生成初始化工作。#004(*IR->progbeg)(argc, argv);#005#006for (i = 1; i < argc; i++)#007{#008 if (strcmp(argv[i], "-n") == 0) #009 {#010 if (!YYnull) 阅读全文
posted @ 2007-05-18 23:06 ajuanabc 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 下面开始关键字、ID等识别,采用这种词法分析,是最高效的,由于在识别的过程里,就已经区分它是什么关键字,而不像其它的词法分析程序,需要查找才能决定是否是关键字。#074 case 'i':#075 if (rcp[0] == 'f'#076 && !(map[rcp[1]]&(DIGIT|LETTER))) {#077 cp = rcp + 1;#078 return IF;#079 }#080 if (rcp[0] == 'n'#081 &&rcp[1] == 't'#082 && 阅读全文
posted @ 2007-05-17 22:17 ajuanabc 阅读(459) 评论(0) 推荐(0) 编辑
上一页 1 ··· 171 172 173 174 175 176 177 178 179 ··· 191 下一页