编译原理实验报告一 简单样本语言的词法分析器

发布时间 : 星期五 文章编译原理实验报告一 简单样本语言的词法分析器更新完毕开始阅读

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

( 2012 —2013学年 第 一 学期 )

课程名称: 开课实验室: 2012 年 12 月 03 日 年级、专业、班 实验项目名称 教师评语 该同学是否了解实验原理: 该同学的实验能力: A.了解□ A.强 □ B.基本了解□ C.不了解□ B.中等 □ C.差 □ B.基本达到□ C.未达到□ 学号 姓名 指导教师 成绩 简单样本语言的词法分析器 该同学的实验是否达到要求: A.达到□ 实验报告是否规: A.规□ A.详细□ B.基本规□ C.不规□ B.一般 □ C.没有 □ 实验过程是否详细记录: 教师签名: 年 月 日 一、 实验目的及容

编译技术是理论与实践并重的课程,而其实验课要综合运用所学的多门课程的容,用来完成一

个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。

调试并完成一个词法分析程序,加深对词法分析原理的理解。

二、实验原理及基本技术路线图(框原理图或程序流程图) 1、 待分析的简单语言的词法

(1) 关键字:

begin if then while do end 所有关键字都是小写。 (2) 运算符和界符:

:= + – * / < <= <> > >= = ; ( ) #

专业资料

(3) 其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:

ID=letter(letter| digit)* NUM=digit digit *

(4) 空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、

界符和关键字,词法分析阶段通常被忽略。

2、

各种单词符号对应的种别码

单词符号 begin if then while do end 种别码 1 2 3 4 5 6 10 单词符号 : := > <> <= < >= 种别码 17 18 20 21 22 23 24 letter(letter| digit)* digit digit * * / + -

11 13 14 15 16 = ; ( ) # 25 26 27 28 0 3、

词法分析程序的功能

输入:所给文法的源程序字符串。

输出:二元组(syn,token或sum)构成的序列。 其中:syn为单词种别码;

token为存放的单词自身字符串; sum为整型常数。

二、

所用仪器、材料(设备名称、型号、规格等或使用软件)

专业资料

1台PC以及VISUAL C++6.0软件。 三、

实验法、步骤(或:程序代码或操作过程)

(1)程序代码:

#include #include #include char prog[80],token[8]; char ch;

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

char *rwtab[6]={\

void scaner() {

for(n=0;n<8;n++) token[n]=NULL; ch=prog[p++]; while(ch==' ') { }

if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) {

m=0;

while((ch>='0'&&ch<='9')||(ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z')) { }

token[m++]='\\0'; p--; syn=10;

for(n=0;n<6;n++)

token[m++]=ch; ch=prog[p++]; ch=prog[p]; p++;

专业资料

}

if(strcmp(token,rwtab[n])==0) { }

syn=n+1; break;

else if((ch>='0'&&ch<='9')) { }

else switch(ch) {

{ } p--; syn=11; if(sum>32767)

syn=-1; sum=0;

while((ch>='0'&&ch<='9')) { }

sum=sum*10+ch-'0'; ch=prog[p++];

case'<':m=0;token[m++]=ch;

ch=prog[p++]; if(ch=='>') { }

else if(ch=='=') {

syn=22; syn=21;

token[m++]=ch;

专业资料

联系合同范文客服:xxxxx#qq.com(#替换为@)