编译原理实验报告 词法分析

更新时间:2023-06-11 04:35:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

昆明理工大学信息工程与自动化学院学生实验报告

( 201 — 201 学年 第 1 学期 )

课程名称:编译原理 开课实验室: 年 月 日

一、实验目的

实验目的: 设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法;

二、实验原理及基本技术路线图(方框原理图)

三、所用仪器、材料(设备名称、型号、规格等) 1台pc和Microsoft Visual C++软件

四、实验方法、步骤

程序源代码:

#include<stdio.h> #include<string.h> #include<iostream.h> char prog[80],token[8];

char ch;

int syn,p,q,m=0,n,sum=0;

char *rwtab[5]={"else","if","then","while","do"};

char *operat[9]={"+","-","*","/",">","<",">=","<=","="};

int scaner() { for(n=0;n<8;n++) token[n]=NULL; ch=prog[p++]; if((ch>='A'&&ch<='Z')||( ch>='a'&&ch<='z')) { m=0; while((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')) {token[m++]=ch; ch=prog[p++]; for(n=0;n<5;n++) if(strcmp(token,rwtab[n])==0) { syn=1; token[m++]='\0'; p--; return 0; } } token[m++]='\0'; p--; syn=2; return 0; } if((ch=='+')||(ch=='-')||(ch=='*')||(ch=='/')||(ch=='=')||(ch=='>=')||(ch=='<=')||ch=='<'||ch=='>') { syn=4; token[0]=ch; token[1]='\0'; return 0; }

else if(ch>='0'&&ch<='9') { sum=0; while(ch>='0' && ch<='9') { sum=sum*10+ch-'0';

ch=prog[p++]; } p--; syn=3; }

else if(ch==';' ||ch=='('||ch==')') syn=5;

else if(ch=='#') syn=0; return 0; }

int main() {p=0;

cout<<"\t\t\t\t 词法分析\n请输入源程序: \n"; do {cin>>ch;

prog[p++]=ch; }while(ch!='#'); q=p; p=0; do { scaner(); switch(syn) { case 3: cout<<"(3,"<<sum<<")\n";break; case -1: cout<<"error!"; break; case 4: cout<<"(4,"<<ch<<")"<<endl;break; case 5:cout<<"(5,"<<ch<<")\n";break; case 0:cout<<"(0,#)"<<endl;break;

default: cout<<"("<<syn<<","<<token<<")\n"; }

}while (syn!=0); return 0; }

五、实验过程原始记录(数据、图表、计算等)

程序运行截图:

六、实验结果、分析和结论(误差分析与数据处理、成果总结等。其中,绘制曲线图时必须用计算纸)

这次实验的内容是词法分析程序,词法分析的任务是就是依次扫视输入串中的各个字符,并从中识别出一系列具有独立意义的基本语法单位——单词,它是整个编译工作的基础。

通过实验,我对词法分析有了更进一步的认识和了解,在实验中还遇到了许多问题,通过不断地解决遇到的问题,我们的能力也得到了提高。

本文来源:https://www.bwwdw.com/article/eyo1.html

Top