编译原理词法分析器语法分析器实验报告
编译技术
班 级 网络 0802 学 号
姓 名 叶晨舟 指导老师 朱 玉 全
2011年 7 月 4 日
一、目的
编译技术是理论与实践并重的课程,而其实验课要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。
二、任务及要求
基本要求:
1.词法分析器 产生下述小语言的单词序列
这个小语言的所有的单词符号,以及它们的种别编码和内部值如下表:
对于这个小语言,有几点重要的限制:
首先,所有的关键字(如IF﹑WHILE等)都是“保留字”。所谓的保留字的意思是,用户不得使用它们作为自己定义的标示符。例如,下面的写法是绝对禁止的:
IF(5)=x 其次,由于把关键字作为保留字,故可以把关键字作为一类特殊标示符来处理。也就是说,对于关键字不专设对应的转换图。但把它们(及其种别编码)预先安排在一张表格中(此表叫作保留字表)。当转换图识别出一个标识符时,就去查对这张表,确定它是否为一个关键字。
再次,如果关键字、标识符和常数之间没有确定的运算符或界符作间隔,则必须至少用一个空白符作间隔(此时,空白符不再是完全没有意义的了)。例如,一个条件语句应写为
IF i>0 i= 1; 而绝对不要写成
IFi>0 i=1;
因为对于后者,我们的分析器将无条件地将IFI看成一个标识符。
这个小语言的单词符号的状态转换图,如下图:
2.语法分析器 能识别由加+ 减- 乘* 除/ 乘方^ 括号()操作数所组成的
算术表达式,其文法如下:
E→E+T|E-T|T T→T*F|T/F|F F→P^F|P p→(E)|i
使用的算法可以是:预测分析法;递归下降分析法;算符优先分析法;
LR分析法等。
3.中间代码生成器 产生上述算术表达式的中间代码(四元式序列)
三、实现过程
给出各题目的详细算法描述,数据结构和函数说明,流程图。
1、词法分析器的流程图
2、语法分析器主程序图
3、中间代码生成器流程图:
四、源程序
词法分析器:
#include<string.h> #include<malloc.h>
#include<iostream> using namespace std;
typedef struct table //分析表存储结构 {
char m[100]; }table;
table M[100][100]; //定义分析表
typedef struct stacknode //定义栈内元素节点 (带头结点(为空)的) {
char data;
struct stacknode *next; }stackk;
void initlink(stackk *&s) //初始化新栈 {
s=(stackk *)malloc(sizeof(stackk)); s->next=NULL; }
void poplink(stackk *&s) //顶元素出栈 {
stackk *p;char v;
if(s->next!=NULL) {
p=s->next;
v=p->data; s->next=p->next; } free(p); }
void pushlink(stackk *&s,char x) //新 元 素 入 栈 {
stackk *p;
p=(stackk *)malloc(sizeof(stackk)); p->data=x;
p->next=s->next; s->next=p; }
void display(stackk *s) //打印 现实显示 栈内元素 {
int i=0,j; char st[100]; p=s->next;
while(p!=NULL) {
st[i++]=p->data; p=p->next; } for(j=i-1;j>=0;j--) printf("%c",st[j]);
for(j=0;j<16-i;j++) //打印 对齐格式 printf("%c",' '); }
char gettop(stackk *s) //返 回 栈 顶 元 素 值 {
if(s->next==NULL) return 0; else
return s->next->data; }
int find(char c,char array[]) //查找函数, { int i;
int flag=0;
for(i=0;i<100;i++) {
if(c==array[i]) flag=1; }
return flag; }
int location(char c,char array[]) //定位函数,指出字符所在位置 { int i;
for(i=0;i<100;i++) {
if(c==array[i])
} }
void error() //出错函数定义 {
printf("%15c出错!\n",' '); }
void analyse(char Vn[],char Vt[]) {
int i,j,m,p,q,length,t,h; char w,X; char str[100]; opt0:
scanf("%s",str);
for(i=0;i<strlen(str);i++) {
if(!find(str[i],Vt)) {
printf("输入字符串有误!请重新输入!"); goto opt0; break; } }
stackk *st; initlink(st);
pushlink(st,'#'); pushlink(st,Vn[0]); //#与识别符号入栈 j=0;
h=1; w=str[0];
printf("步骤%-12c分析栈%-24c剩余输入串%-12c所用产生式\n",' ',' ',' '); opt1:
printf("%-16d",h); //显示步骤 h++;
display(st); //显示分析栈中内容 X=gettop(st); //上托栈顶符号放入X poplink(st);
for(int k=0;k<14+j;k++) //打印对齐格式
printf("%c",' ');
for(t=j;t<strlen(str);t++)
{
printf("%c",str[t]); //显示剩余字符串 }
if(find(X,Vt)&& X!='#') //分析栈的栈顶元素和剩余输入串的第一个元素相比较 {
if(X==w) { printf("%15c匹配\n",X); j++; w=str[j]; goto opt1; } else
error(); } else {
if(X=='#') {
if(X==w) {
printf("%8c是该文法的句子!\n",' '); } else
error(); } else {
p=location(X,Vn); q=location(w,Vt);
char *S1="null",*S2="NULL";
if(strcmp(M[p][q].m,S1)==0||strcmp(M[p][q].m,S2)==0) //查找产生式 error(); else
{
char str0[100];
strcpy(str0,M[p][q].m);
printf("%15c-->%s\n",X,str0); //显示对应的产生式 if(strcmp(str0,"$")==0) goto opt1; else {
length=strlen(str0); //逆序进栈 for(m=length-1;m>=0;m--) {
pushlink …… 此处隐藏:4687字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [求职职场]加法运算定律的运用练习题
- [求职职场]大型石油化工工业过程节能新技术
- [求职职场]2015-2020年中国箱纸板行业分析与投资
- [求职职场]NADEX-IWC5A点焊机故障代码
- [求职职场]英语阅读 非常有用
- [求职职场]鲁卫疾控发〔2012〕2号(联合,印发山东
- [求职职场]2014年莆田公务员行测技巧:数字推理的
- [求职职场]基于最近发展区理论的高中数学课堂有效
- [求职职场]与贸易有关的知识产权协议
- [求职职场]【王风范】微演说·职场演说三
- [求职职场]新时代国珍健康大课堂
- [求职职场]群论期末考试复习题
- [求职职场]施工现场消防安全专项施工方案(范本)-
- [求职职场]初中物理光学知识点归纳完美版
- [求职职场]毕业设计总结与体会范文
- [求职职场]江南大学2018年上半年展示设计第1阶段
- [求职职场]景尚乡民兵参战支前保障方案
- [求职职场]【优质】2019年工会职工之家建设工作总
- [求职职场]数据库技术与应用—SQL Server 2008(第
- [求职职场]汽车变速箱构造与工作原理
- 首钢工业区工业遗产资源保护与再利用研
- 第4课 《大学》节选
- 2016程序文件——检验检测结果发布程序
- 2011年高考试题文言文阅读全解释__2011
- 化学是一门基础的自然科学
- 海外做市商制度的借鉴意义
- 外国建筑史复习资料(
- 七年级下思想品德期末综合测试(二)
- 思政课部2013年上学期教学工作总结
- 电大国际公法任务3 0004
- 《圆的认识》教学设计
- 中国轨道交通牵引变流器行业市场发展调
- 中泰证券#定期报告:坚守时代硬科技和
- 浅论企业财务管理与企业经营投资风险的
- 大功率半导体激光器光纤耦合技术调研报
- 中国传统家具的现状与发展探讨
- Broadcom数字电视芯片助海尔扩展高清电
- 新HSK4词汇练习 超全(五)
- 2013届高考数学单元考点复习12
- 雨霖铃精品课件




