编译原理词法分析器实验报告.docx
- 文档编号:27837672
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:7
- 大小:18.04KB
编译原理词法分析器实验报告.docx
《编译原理词法分析器实验报告.docx》由会员分享,可在线阅读,更多相关《编译原理词法分析器实验报告.docx(7页珍藏版)》请在冰豆网上搜索。
编译原理词法分析器实验报告
编译原理词法分析器实验报告
篇一:
编译原理词法分析器实验报告
曲阜师范大学实验报告
计算机系2008年级软件工程一班组日期2010年10月17日星期日
姓名
陈金金同组者姓名
课程编译原理成绩
实验名称:
教师签章词法分析器
一、实验目的:
1·掌握词法分析的原理。
2·熟悉保留字表等相关的数据结构与单词的分类方法。
3·掌握词法分析器的设计与调试。
二、实验内容:
根据编译中的分词原理,编写一个词法分析程序:
1.输入:
任意一个C语言程序的源代码。
2.处理:
对输入进行分析,分离出保留字、标识符、常量、算符和界符。
3.输出:
对应的二元式(种别编码自定,可暂编为一类对应一个编码)。
三、实验要求:
1.任选C/C++/Java中的一种高级程序语言编程完成词法分析器。
2.词法分析器应以教材所述分词原理为依据,使用恰当的数据结构和方法,结构清晰、高效。
四、实验环境:
WindowsXp操作系统,J2SE,Eclipse集成开发环境
五、实验分析:
将源代码作为长字符串进行读入,之后通过switch语句,及状态转换图进行词素识别,并对识别的词素进行分类整理以二元式的形式输出。
六、实验过程:
1、建立词法分析器界面,很简单:
输入框,输出框,执行分析按钮,清空按钮,退出程序按钮。
主要的地方是,考虑mvc开发模式,为model及controller提供接口。
实现界面如下所示:
2、核心代码的编写,考虑到需要进行词素的匹配,创建符号表类SymTable。
提供两个变量,分别存放如下内容:
并提供方法insert,lookUp,分别负责标志符的插入和查找。
3.、根据语法规则书写状态转换图,并用switch语句实现:
需要注意的地方是,begin和forward两个指针的移动:
通过swith语句识别词素,并在符号表中进行匹配,匹配成功,则返回相应的记号,否则返回id。
七、实验结论:
实验过程还算顺利,遇到的一系列问题都得到比较好的解决,当然分析器还有很大的改进空间,这里只是简单的实现了词素的识别及简单的判断。
下一步的目标是完成界符后注释的判断,几种特殊运算符在不同的上下文中会有不同的含义,瑞和进行判断。
例外一个附加功能就是利用浏览的形式直接从文件中读取源文件进行源代码获取,且分析信息可以另存为文本文件。
篇二:
编译原理实验报告词法分析
编译原理实验报告
词法分析器
学院:
计算机科学与技术
时间:
2012/6/9
一、问题描述
选择计算机高级程序语言之一——C语言,运用恰当的词法分析技术线路,设
计和实现其对应的词法分析器
提示:
技术线路选择如下两种之一:
正则式→NFA→DFA→minDFA→程序设计
或正则文法→NFA→DFA→minDFA→程序设计。
要求:
分析器输出结果存入到磁盘文件中,具有出错处理功能。
二、系统分析
编译原理涉及词法分析,语法分析,语义分析及优化设计等各方面。
词法分析阶段是编译过程的第一个阶段,是编译的基础。
这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词。
词法分析程序实现这个任务。
从左到右逐个字符对构成源程序的字符串进行扫描,依据词法规则,识别出一个一个的标记(token),把源程序变为等价的标记串序列。
执行词法分析的程序称为词法分析器,也称为扫描器。
本次实验,我选择用C++来实现这个词法分析器。
程序语言的单词符号一般分为以下六种:
关键字、标识符、
常量、运算符、界符、字符串
词法分析程序所输出的单词符号常常采用以下二元式表示:
(单词种别,单词自身的值),单词的种别是语法分析所需要的信息,而单词自身的值是编译其他阶段需要的信息。
单词的种别可以用整数编码表示,比如标识符编码为1,程序最后输出的形式应为:
关键字int(2,int)标识符t_val常量+2其中,本次实验设计的如下:
(1)关键字有34个:
分别包括
”char”,”int”,”short”,”long”,”signed”,”unsigned”,”float”,”double”,”const”,”void”,”volatile”,”enum”,”struct”,”union”,”typedef”,”auto”,”extern”,”static”,”register”,”if”,”else”,”switch”,”case”,”default”,”while”,”do”,”for”,”break”,”continue”,”goto”,”return”,”sizeof”,”#include”,”#define”
前面32个是标准C的关键字,后两个是预编译的关键字。
(2)常量分为:
小数,整数,浮点数,字符。
本次实验中,设计了小数,整数和浮点数,但是都没有包含后面的U,L,UL等标识。
而单个字符常量并没有考虑。
也就是‘a’表示的并不是对应的数值。
(3)运算符和界符:
本次实验设计的运算符和界符很多,基本将所有的运算符都设计进去了。
其中包括+,++,+=,-,-=,->,--,*,*=,/,/=,[,],
,>=,=,==,>>,>>=,篇三:
编译原理实验报告一简单样本语言的词法分析器
昆明理工大学信息工程与自动化学院学生实验报告
(2012—2013学年第一学期)
课程名称:
开课实验室:
2012年12月03日
一、实验目的及内容
编译技术是理论与实践并重的课程,而其实验课要综合运用所学的多门课程的内容,用来完成
一个小型编译程序。
从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。
调试并完成一个词法分析程序,加深对词法分析原理的理解。
二、实验原理及基本技术路线图(方框原理图或程序流程图)1、待分析的简单语言的词法
(1)关键字:
beginifthenwhiledoend所有关键字都是小写。
(2)运算符和界符:
:
=+–*/>>==;#
(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:
ID=letter(letter|digit)*NUM=digitdigit*
(4)空格由空白、制表符和换行符组成。
空格一般用来分隔ID、NUM,运算符、
界符和关键字,词法分析阶段通常被忽略。
2、
各种单词符号对应的种别码
3、
词法分析程序的功能
输入:
所给文法的源程序字符串。
输出:
二元组(syn,token或sum)构成的序列。
其中:
syn为单词种别码;
token为存放的单词自身字符串;sum为整型常数。
二、
所用仪器、材料(设备名称、型号、规格等或使用软件)
1台PC以及VISUALC++软件。
三、
实验方法、步骤(或:
程序代码或操作过程)
(1)程序代码:
#include#include#include
charprog[80],token[8];charch;
intsyn,p,m=0,n,row,sum=0;
char*rwtab[6]={“begin”,”if”,”then”,”while”,”do”,”end”};
voidscaner{
fortoken[n]=NULL;ch=prog[p++];while{}
if||){}
elseif)
ch=prog[p];p++;
m=0;
while||||){}
token[m++]=‘\0’;p--;syn=10;for
if==0){}
syn=n+1;break;token[m++]=ch;ch=prog[p++];
{{sum=0;
while){sum=sum*10+ch-’0’;ch=prog[p++];
}
}p--;syn=11;if
syn=-1;}
elseswitch
{
case’’:
m=0;token[m++]=ch;ch=prog[p++];if{syn=24;token[m++]=ch;
}else{syn=20;p--;}
break;
case’:
’:
m=0;token[m++]=ch;ch=prog[p++];if{syn=18;token[m++]=ch;
}else{syn=17;p--;}
break;
case’*’:
syn=13;token[0]=ch;break;case’/’:
syn=14;token[0]=ch;break;case’+’:
syn=15;token[0]=ch;break;case’-’:
syn=16;token[0]=ch;break;case’=‘:
syn=25;token[0]=ch;break;case’;’:
syn=26;token[0]=ch;break;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 词法 分析器 实验 报告