词法分析编译原理论文

上传人:人*** 文档编号:512191250 上传时间:2024-02-04 格式:DOC 页数:10 大小:48KB
返回 下载 相关 举报
词法分析编译原理论文_第1页
第1页 / 共10页
词法分析编译原理论文_第2页
第2页 / 共10页
词法分析编译原理论文_第3页
第3页 / 共10页
词法分析编译原理论文_第4页
第4页 / 共10页
词法分析编译原理论文_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《词法分析编译原理论文》由会员分享,可在线阅读,更多相关《词法分析编译原理论文(10页珍藏版)》请在金锄头文库上搜索。

1、-词法分析摘 要:词法分析le*ical analysis是计算机科学中将字符序列转换为单词Token序列的过程。进展词法分析的程序或者函数叫作词法分析器Le*ical analyzer,简称Le*er,也叫扫描器Scanner。词法分析器一般以函数的形式存在,供语法分析器调用。关键词:词法分析标识符计算机系统与人信息交换界面多数是应用高级语言来实现。一个高级语言程序的实现,必须依赖于相应的编译系统。所谓编译程序就是指能够把*一种语言程序转换成另一种与之等价的语言程序。它通常包括五个阶段:词法分析,语法分析,语义分析与中间代码的产生、优化,目标代码的生成。完成计算机翻译过程的关键阶段,它为后面

2、的语法分析、语义分析做好准备,打好根底,以便快速地、高质量地生成目标语言程序。因此词法分析是编译的根底。词法分析器所处理的对象即词法分析程序的输入数据,实际上是源程序经过编译预处理,去掉多余的符号后而形成的代码,这样给词法分析带来方便。词法分析的过程是线性的从头至尾扫描一遍,复杂度较低,易实现。一、实验目的设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。二、实验要求2.1 待分析的简单词法(1).关键字:begin if then while do end lishuman lishuman2021 041886所有的关键字都是小写。(2).运算符和界符:= + - */( ) ,

3、 : ; = 35=21 =37-239then*:=2*+1/3;end*的源文件,经过词法分析后输出如下序列:(1,begin)(10,*)(18,:=)(11,9)(26,;)(2,if)2.4识别语言单词的状态转换图识别语言单词的状态转换图如下列图2-4所示:状态0为初态,凡带双圈者为终态。 图2-4识别语言单词的状态转换图三、词法分析程序的算法思想算法的根本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其根本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。3.1主程序示意图:图3-1主程序示意图其中初始包括以下两个方面:(1).关键字表的初值。关键字作为特

4、殊标识符处理,把它们预先安排在一表格中(称为关键字表),当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:Char*nrwtab6=“begin,“if,then,while,“do,end,;(2).程序中需要用到的主要变量为syn,token和sum3.2扫描子程序的算法思想:首先设置3个变量:token用来存放构成单词符号的字符串;sum用来整型单词;syn用来存放单词符号的种别码。图3-2扫描子程序主要局部流程图四、运行结果4.1.安装Linu*虚拟机(已经配置好虚拟机的可以跳过此步骤)1.安装VMwar

5、e-player2.3.在VMware-player中设置虚拟机:点击“翻开已经存在的虚拟机,然后选择“Ubuntu16.04_64-bit.vm*。4.启动虚拟机,查看是否安装成功。4.2.创立工作目录在用户家目录下建立lishuman文件夹,建立scaner.c文件编写代码,建立testin.t*t输入程序。4.3.词法分析1.翻开命令行。cd lishuman/回车,进入lishuman目录2.编译程序。编译scaner.c文件。图4-3编译scaner.c文件4.4. 编译运行程序testin.t*t是词法分析器的输入程序即输入的源程序,此程序由学生给出。运行后,自动在lishuman

6、目录下生成result.t*t文件。testin.t*t和result.t*t文件都可由记事本查看容图4-4.1 testin.t*t文件容图4-4.2 result.t*t文件容如果testin.t*t中输入有误图4-4.3 testin.t*t错误文件容则运行时显示:图4-4.4 result.t*t错误文件容五、源程序*include *include *include *define _KEY_WORD_END waiting for your e*pandingtypedef struct int typenum; char * word; WORD;char input255;/输

7、入缓冲区 char token255=;/单词缓冲区 int p_input;/输入缓冲区指针 int p_token;/单词缓冲区指针 char ch;/当前读入字符 char* KEY_WORDS=begin,if,then,while,do,end,lishuman,lishuman2021 041886,_KEY_WORD_END;/关键字数组 WORD* scaner(WORD* word);/词法扫描函数 int main(int argc,char * argv)int over=1;WORD* oneword= calloc(1,sizeof(WORD*);/printf(En

8、ter Your words(end with $):);/scanf(%$s,input); FILE *fin;char buffer1000;if(fin=fopen(testin.t*t,r)=NULL)printf(Cannot open the file!n);e*it(-1);while(fgets(buffer,100,fin)!=NULL)strcat(input,buffer); fclose(fin); FILE *fout;if(fout=fopen(result.t*t,w)=NULL)printf(Cannot open the file!n);e*it(-1);

9、p_input=0;printf(Your words:n%sn,input);while(overtypenumtypenum,oneword-word); /打印种别码和单词自身的值 over=oneword-typenum; fclose(fout);printf(npress done.);/从缓冲区读取一个字符到ch中 char m_getch()ch=inputp_input;p_input=p_input+1;return (ch);/去掉空白符号 void getbc()while(ch= |ch=10)ch=inputp_input;p_input=p_input+1;/拼接

10、单词 void concat()tokenp_token=ch;p_token=p_token+1;tokenp_token=0;/判断是否字母 int letter()if(ch=a&ch=A&ch=0&chtypenum=10;myword-word=;p_token=0;m_getch();getbc();if(letter()while(letter()|digit()concat();m_getch();retract();myword-typenum=reserve();myword-word=token;return(myword);else if(digit()while(digit()concat();m_getch();/retract();if(letter()myword-typenum=-1;myword-word=ERROR;printf(In %s(), line=%d, in

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号