资源描述:
《编译原理实验1.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、编译原理实验报告姓名:李宏涛班级:计科(2)学号:E10620217基于C语言词法分析器的设计摘要首先对编译原理进行概括的介绍,1主要是描写设计内容及设计要求,2介绍设计的基本原理,3对程序设计的总体方案及各模块设计做了介绍,4对程序进行测试。引言:《编译原理》是国内外各高等院校计算机科学技术类专业,特别是计算机软件专业的一门重要专业课程。该课程系统地向学生介绍编译程序的结构、工作流程及编译程序各组成部分的设计原理和实现技术。由于该课程理论性和实践性都比较强,内容较为抽象复杂,涉及到大量的软件设计算法,因此,一直是一门比较难学的课程。为了使学生更好地理解和
2、掌握编译技术的基本概念、基本原理和实现方法,实践环节非常重要,只有通过上机进行程序设计,才能使学生对比较抽象的教学内容产生具体的感性认识,增强学生综合分析问题、解决问题的能力,并对提高学生软件设计水平大有益处。编译原理涉及词法分析,语法分析,语义分析及优化设计等各方面。词法分析(英语:lexicalanalysis)是计算机科学中将字符序列转换为单词(Token)序列的过程。进行语法分析的程序或者函数被称为词法分析器(Lexicalanalyzer简称Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。词法分析阶段
3、是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符接着一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用Lex等工具自动生成。词法分析是所有分析优化的基础,涉及的知识较少,比如状态转换图等,易于实现。本次实验程序设计语言是C语言。1.实验内容:设计一个程序,调试、编译,实现词法分析的功能,识别各单词或字符所属类别,并显示在屏幕上。(1).运行词法分析实验一,学习样例程序。(2).通过理解正规式、有限自动机原理,编制程序。此程序应具有如下功能:
4、l将样例程序中所有注释字母均大写;(即在注释对/*…*/之间的所有字母。);l将样例程序加行号。2.设计方法:词法分析器:逐个读入源程序字符并按照构词规则切分成一系列单词。单词是语言中具有独立意义的最小单位,包括保留字、标识符、运算符、标点符号和常量等。词法分析是编译过程中的一个阶段,在语法分析前进行。也可以和语法分析结合在一起作为一遍,由语法分析程序调用词法分析程序来获得当前单词供语法分析使用。要求:利用该词法分析器完成对源程序字符串的词法分析。输出形式是源程序的单词符号二元式的代码,并保存到自己命名的文件中。单词符号及种别编码单词符号种别编码单词符号种
5、别编码main1变量符号20if2=45int3>46for4<47while5>=48do6<=49return7==50……!51#40%52+41&53-42…………单词符号分类:单词是程序设计语言的基本语法单位和最小语义单位。单词符号一般分为五大类(1)关键字"begin","end","if","then","else","while","write","read","do","call","const","char","until","procedure","repeat"等(2)运算符:"+","-","*","/","="等(3)界符:"{
6、","}","[","]",";",",",".","(",")",":"等(4)标识符(5)常量3.实验结果图:初始界面:显示分析结果:out.txt结果:换行操作:结果如图:实现了显示行号和注释大写3.实验代码:#include#include#includestructkeywords//关键字结构体{charname[10];intnum;};structrelation//运算符、关系运算符结构体{charname[4];intnum;};structkeywordstest[18]={{
7、"main",1},{"if",2},{"int",3},{"for",4},{"while",5},{"do",6},{"retuen",7},{"break",8},{"continue",9},{"stdio.h",10},{"include",11},{"case",12},{"float",13},{"switch",14},{"void",15},{"else",16},{"for",17}};structrelationrelation[18]={{"#",40},{"+",41},{"-",42},{"*",43},{"/",44},{"=
8、",45},{">",46},{"<",47},{">=",48}