1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言实现编译器编译原理 编译原理课程设计--C语言编译器实现.doc

c语言实现编译器编译原理 编译原理课程设计--C语言编译器实现.doc

时间:2023-07-12 07:14:37

相关推荐

c语言实现编译器编译原理 编译原理课程设计--C语言编译器实现.doc

编译原理课程设计--C语言编译器实现

甘肃政法学院

编译原理课程设计

题 目 C语言编译器实现

计算机科学学院计算机科学与技术专业10 级 计本 班

学 号: 81010137

姓 名: 杨青虎

指导教师: 李 霞

完成时间: 年 6 月

目 录

一、 原理1

1、简介1

2、单词符号及种别表示1

3、语法结构定义如下:2

二、运行环境3

三、 算法设计思想3

1、词法分析主要算法3

2、语法分析主要算法3

3、语义分析主要算法4

四、 程序流程图5

五、运行测试结果8

六、心得体会9

七、源代码9

C语言编译器实现

一、 原理

1、简介

编译程序的工作过程一般可以分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。每一个阶段在功能上是相对独立的,它一方面从上一个阶段获取分析的结果来进行分析,另一方面由将结果传递给下一个阶段。由编译程序的五个阶段就对应了编译系统的结构。

2、单词符号及种别表示

单词符号种别编码main1int 2float3double4char5if 6else 7do8while9l(l|d)*10dd* 20=21+22- 23* 24/ 25(26)27{28}29,30;31>32>=33<34<=35==36!=37‘\0’1000ERROR-1

3、语法结构定义如下:

::= ::= ‘{‘’}’

::={;};

::=||

::=ID=

::=if

::=do while

::=

::= ::= ::=)

::= Windows 系统 Visual C++ 6.0

三、 算法设计思想

1、词法分析主要算法

这部分对源文件进行分析,允许/* */注释。从源文件依次读取字符,对字符进行分析,组成字符串、数字、关系符等固定含义的token符,并把它们添加到token链中,如果遇到非法字符报错并退出程序。

2、语法分析主要算法

这部分对Token链进行分析,利用自底向上的分析方法,构建SLR(1)分析表的过程是手工完成的。语法分析的同时构建语法树,移进时创建叶子,规约时创建节点。

3、语义分析主要算法

这部分对语法树从左到右进行遍历,节点记录了规约式的编号,遍历到节点时就进行相应处理。语义分析主要检查变量、函数是否被定义或重定义,同时产生四元式。

函数一览表

void scanner();

void lrparser();

void staBlock(int *nChain);

void staString(int *nChain);

void sta(int *nChain);

void fuzhi();

void tiaojian(int *nChain);

void xunhuan();

char* E();

char* T();

char* F();

char *newTemp();

void backpatch(int p,int t);

int merge(int p1,int p2);

void emit(char *res,char *num1,char *op,char *num2);

四元组结构体定义:

struct{

char result[10];

char arg1[10];

char opera[10];

char arg2[10];

}fourCom[20];

四、 程序流程图

图1 主函数流程图

图2 递归下降分析分析程序流程图

图3 语句块分析流程图

图4 语句串分析流程图

是否

图5 语句分析流程图

五、运行测试结果

正确程序结果

错误程序结果:报错!(1)

错误程序结果:报错!(2)

六、心得体会

这次的课程设计,最大的收获就是清楚了编译的整个过程,在学习编译原理这门课程之时,在做设计的过程中和词法分析、语法分析、语义分析联系起来, 非常清晰的理解了简单编译器

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。