以下文档格式全部为word格式,下载后您可以任意修改编辑。
编译原理课
程设计题 目 C语言编译器实现计算机科学
学院计算机科学与技术专业10 级 计本 班
学 号: 姓 名: 指导教师:
完成时间: 2013 年 6 月 目 录
一、 原理 ································································································ 1
1、简介 ····························································································· 1 2、单词符号及种别表示········································································· 1 3、语法结构定义如下:········································································· 2 二、运行环境···························································································· 3 三、 算法设计思想 ···················································································· 3
1、词法分析主要算法 ··········································································· 3 2、语法分析主要算法 ··········································································· 3 3、语义分析主要算法 ··········································································· 3 四、 程序流程图 ······················································································· 4 五、运行测试结果 ······················································································ 7 六、心得体会···························································································· 8 七、源代码 ······························································································ 9
C语言编译器实现
一、 原理
1、简介
编译程序的工作过程一般可以分为五个阶段:词法分析、语法分析、语义分析与中间代码产生、优化、目标代码生成。每一个阶段在功能上是相对独立的,它一方面从上一个阶段获取分析的结果来进行分析,另一方面由将结果传递给下一个阶段。由编译程序的五个阶段就对应了编译系统的结构。
2、单词符号及种别表示
单词符号 main int float double char if else do while l(l|d)* dd* 种别编码 1 2 3 4 5 6 7 8 9 10 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 1000 -1 = + - * ( ) { } , ; > >= < <= == != ‘\\0’ ERROR
3、语法结构定义如下:
<程序> ::= main()<语句块> <语句块> ::= ‘{‘<语句串>’}’ <语句串>::=<语句>{;<语句>};
<语句>::=<赋值语句>|<条件语句>|<循环语句> <赋值语句>::=ID=<表达式> <条件语句>::=if<条件><语句块> <循环语句>::=do <语句块>while <条件> <条件>::=<表达式><关系运算符><表达式> <表达式> ::= <项>{ +<项>|-<项>} <项> ::= <因子>{*<因子>|<因子>} <因子> ::=ID|num|(<表达式>) <关系运算符> ::= <|<=|>|>=|==|!
二、运行环境
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 主函数流程图
否