编译原理课程设计---一个简单编译器的设计与分析

摘要
使用过现代计算机的人都知道,多数用户是应用高级语言来实现他们所需要的计算的。现在计算机系统一般都含有不只一个的高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序,供用户按不同需要进行选择。高级语言编译程序是计算机系统软件最主要的组成部分之一,也是用户最直接关系的工具之一。
计算机上执行一个高级语言程序一般分为两步:第一,用一个编译程序把高级语言翻译成机器语言程序;第二,运行所得的机器语言程序求得计算结果。
通常说的翻译程序是指能够把某一种语言程序转换成另一种语言程序(目标语言程序)。如果源语言诸如Fortran,Pascal,C,Ada或java这样的高级语言,而目标程序是诸如汇编语言或者机器语言这类的低级语言,这样的一个翻译程序就是称为编译程序。
总账
一个编译程序的工作过程一般可以划分为五个阶段:词法分析、语法分析、语义分析与中间代码生成、优化、目标代码生成。每个阶段都是从上一个阶段得到结果,对他进行分析,并且根据一些外部环境(例如符号表等)得到最终的输出结果。要构造一个编译程序,可以按照这样的阶段来分别构造,最后来连调。
现在人们已经建立了多种编制部分编译程序或整个编译程序的有效工具。有些能用于自动生成扫描器(如LEX),有些可以用于自动产生语法分析器(如YACC),有些甚至可以用来自动产生整个的编译程序。这些构造编译程序的工具成为编译程序-编译程序、编译程序产生器或翻译程序书写系统,他们是按照编译程序和目标语言的形式描述而自动产生编译程序的。
编译程序是一极其庞大而又复杂的系统,掌握它比较苦难。但是一旦对其掌握,对以后的程序语言设计,系统软件分析,系统软件设计,形式语言研究等方面都是非常有好处的。
关键字:C语言、、编译、扫描器、语法分析
一、需求分析
给出类C语言(C语言的子集)的词法和语法定义,并根据对应的语法定义写出一些属性文法和语法制导。根据词法和语法的定义,构造一个编译程序,它主要可以完成如下功能:
1、读入某个已经编辑好的类C源程序文件,通过词法分析器,生成二元组,同时检查词法错误;
2、语法分析器将产生的二元组作为输入,进行语法分析,同时检查语法错误;
3、在语法分析同时,利用属性文法和语法制导技术,产生具体的语意动作,并对符号表进行操作;
4、根据语义动作产生整个源程序的四元式序列;
5、将产生的四元式序列连同符号表一起输出,作为编译程序的最终输出结果;
6、对最后的代码优化和目标代码生成要有所考虑,必须留有一定的接口供以后扩展;
7、增大程序的可移植性,努力做到整个系统方便移植。
二、详细算法设计
词法分析程序→语法分析程序→语义分析程序→编译器。
三、流程图
图I 主函数示意图
kta
图II 递归下降分析程序示意图
图III 语句块分析示意图
图IV 语句串分析示意图
图V 语句分析示意图
清洁灌肠
四、相关函数说明
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(); //Expresiion表达式
char* T(); //Term项
char* F(); //Factor因子
char *newTemp(); //自动生成临时变量
void backpatch(int p,int t); //回填
w980i
int merge(int p1,int p2); //合并p1和p2
void emit(char *res,char *num1,char *op,char *num2); //生成四元式五.运行结果
图VI 赋值语句的分析

本文发布于:2024-09-21 13:44:08,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/444537.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:gcc 编译指令
标签:编译程序   程序   语言   分析   词法   产生   语法
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议