一个c编译器的教学ppt课件

一个c编译器的教学ppt课件

ID:10238326

大小:211.01 KB

页数:0页

时间:2018-06-12

一个c编译器的教学ppt课件_第页
预览图正在加载中,预计需要20秒,请耐心等待
资源描述:

《一个c编译器的教学ppt课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、MicroC一个C编译器的 设计与实现本次演讲以设计、实现C语言的一个子集的编译程序(MICROC)为主题,介绍本编译器的原理,一些具体的数据结构和设计上的独到之处。主要性能整体设计主要性能源语言:C语言子集目标代码:80x86汇编语言1)文法:整数C文法2)支持的数据类型:void,char,int以及数组。忽略unsigned和signed。忽略auto,register,const。能够识别extern,static,long(extern为函数,不支持extern变量。static和long都忽略)。对double和float作int处理。3)

2、支持的运算符:算术运算符:+,-,*,/,%,?:(三目),sizeof。关系运算符:<,>,>=,<=,!=,==逻辑运算符:&&,

3、

4、,!位运算:&,

5、,^,~,<<,>>,赋值运算:=,+=,-=,*=,/=,%=&=,!=,^=,~=,<<=,>>=4)支持typedef5)支持函数,main当作普通函数处理。6)支持预编译#include7)支持的语句:条件语句:if...else循环语句:while{},do...while,for(;;)转移语句:goto,return,continue,break分支语句:switch()case8)支

6、持两种类型的注释◆ANSIC风格的注释/*……*/不支持注释的嵌套,位于/*和*/之间的字符串将被忽略。◆C++行注释//……C源程序词法分析语法分析与代码生成汇编源程序符号表管理出错处理MicroC总体设计符号表的设计与实现MicroC的符号表用堆栈和二叉树的形式实现。MicroC的符号是以CompoundStatement为单位进行组织的,把处于同一CompoundStatement中的符号放在一个二叉树上。全局变量的处理方式:在MicroC中,全局变量是作为最外层的CompoundState- ment挂在第一个被压入堆栈的指针上。直到程序结束,

7、此指 针才被退栈。这样,全局变量始终是可见的。函数的符号表在MicroC中,函数由于其特殊性,并不与一般的变量 作同样的处理,而是放在一个称为sg_function_symtab的全 局表中。此sg_function_symtab用二叉树的形式实现,使得 查找方式得到统一,并提高查找的效率。Label的符号表在MicroC中,当前函数中出现的label放在头节点为sg_goto_label_symtab的二叉树中。源程序可以使用goto label语句,但label的范围限定在当前函数中。也就是说,不 能通过goto跳到另外一个函数中,每个函数可以看作

8、是一个 只有单一入口的基本块,这样有利于程序的结构化。数据结构:Typedefstruct_symbol_{ charname[NAME_LEN]; charrname[LABEL_LEN]; unsignedis_symtab; unsignedis_function; unsignedis_declaration; unsignedis_array; unsignedis_argument; unsignedis_assign; unsignedis_cl; unsignedis_rvalue; unsignedis_pushed; intnum_

9、ele; specifierbasetype; intoffset; struct_symbol_*next; struct_symbol_*args; struct_symbol_*lchild,*rchild;}symbol;symbol结构的几个关键域的具体含义解释如下:charname[NAME_LEN]是标识符的名称;charrname[NAME_LEN]是标识符在汇编代码中的名称;unsignedis_symtab==1表示此Symbol是某个二叉树的根;unsignedis_function==1表示此标识符是一个函数;unsignedi

10、s_declaration==1若此标识符为一个标号或函数,则 此标号或函数为声明,而不是定义;unsignedis_array==1表明此标识符是一个数组;unsignedis_argument==1表明此标识符表示函数的一个参数;ununsignedis_assign==1表示此标识符是一个变量,并且已 经被赋予了初值;unsignedis_cl==1表示此symbol是一个常量;unsignedis_rvalue==1表示此标识符是一个右值;unsignedis_pushed==1表示此标识符所代表的expression的 值已经压入栈;intn

11、um_ele标识符表示数组时,用来表示数组元素的个数;specifierbasetype用来表

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。