编译原理,实验报告,词法分析(共10篇)

上传人:bin****86 文档编号:60265754 上传时间:2018-11-15 格式:DOCX 页数:26 大小:26.48KB
返回 下载 相关 举报
编译原理,实验报告,词法分析(共10篇)_第1页
第1页 / 共26页
编译原理,实验报告,词法分析(共10篇)_第2页
第2页 / 共26页
编译原理,实验报告,词法分析(共10篇)_第3页
第3页 / 共26页
编译原理,实验报告,词法分析(共10篇)_第4页
第4页 / 共26页
编译原理,实验报告,词法分析(共10篇)_第5页
第5页 / 共26页
点击查看更多>>
资源描述

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

1、为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划编译原理,实验报告,词法分析(共10篇)编译原理实验报告词法分析器学院:计算机科学与技术时间:XX/6/9一、问题描述选择计算机高级程序语言之一C语言,运用恰当的词法分析技术线路,设计和实现其对应的词法分析器提示:技术线路选择如下两种之一:正则式NFADFAminDFA程序设计或正则文法NFADFAminDFA程序设计。要求:分析器输出结果存入到磁盘文件中,具有出错处理功能。二、系统分析编译原理涉及词法分析,语法分析,语义分析及优化设计等各方面。词法分析阶段是编译过程的第一个阶段,是

2、编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。从左到右逐个字符对构成源程序的字符串进行扫描,依据词法规则,识别出一个一个的标记,把源程序变为等价的标记串序列。执行词法分析的程序称为词法分析器,也称为扫描器。本次实验,我选择用C+来实现这个词法分析器。程序语言的单词符号一般分为以下六种:关键字、标识符、常量、运算符、界符、字符串词法分析程序所输出的单词符号常常采用以下二元式表示:,单词的种别是语法分析所需要的信息,而单词自身的值是编译其他阶段需要的信息。单词的种别可以用整数

3、编码表示,比如标识符编码为1,程序最后输出的形式应为:关键字int标识符t_val(1,t_val)常量+2(3,+2)其中,本次实验设计的如下:关键字有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前

4、面32个是标准C的关键字,后两个是预编译的关键字。常量分为:小数,整数,浮点数,字符。本次实验中,设计了小数,整数和浮点数,但是都没有包含后面的U,L,UL等标识。而单个字符常量并没有考虑。也就是a表示的并不是对应的数值。运算符和界符:本次实验设计的运算符和界符很多,基本将所有的运算符都设计进去了。其中包括+,+,+=,-,-=,-,-,*,*=,/,/=,=,=,=,=,=;()#关键字:其他单词是标识符和整型常数,通过以下正规式定义:ID=letter*NUM=digitdigit*空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。

5、2、各种单词符号对应的种别码3、词法分析程序的功能输入:所给文法的源程序字符串。输出:二元组构成的序列。其中:syn为单词种别码;token为存放的单词自身字符串;sum为整型常数。三、源程序代码:#include#include#includecharprog80,token8;charch;intsyn,p,m=0,n,row,sum=0;char*rwtab6=begin,if,then,while,do,end;voidscaner()for(n=0;n=a&ch=A&ch=0&ch=a&ch=A&ch=0&ch32767)syn=-1;sum=0;while(ch=0&ch)else

6、if(ch=)syn=21;tokenm+=ch;elsebreak;syn=23;p-;syn=22;tokenm+=ch;case:m=0;tokenm+=ch;ch=progp+;if(ch=)elsebreak;syn=20;p-;syn=24;tokenm+=ch;case:m=0;tokenm+=ch;ch=progp+;if(ch=)elsesyn=17;p-;syn=18;tokenm+=ch;break;case*:syn=13;token0=ch;break;case/:syn=14;token0=ch;break;case+:syn=15;token0=ch;break;

7、case-:syn=16;token0=ch;break;case=:syn=25;token0=ch;break;case;:syn=26;token0=ch;break;case(:syn=27;token0=ch;break;case):syn=28;token0=ch;break;case#:syn=0;token0=ch;break;casen:syn=-2;break;default:syn=-1;break;voidmain()p=0;row=1;cout;p14=;p15=;if(fp=fopen(,r)=NULL)/读取文件夹下的文件printf(Cannotopenthef

8、ilen);exit(0);charch,ch1;intn=0;ch1=ch=fgetc(fp);doif(ch1=a&ch1=A&ch1=a&ch=A&ch=0&ch#39;)instringn+=ch;elseinstringn+=0;strupr(instring);for(i=0;i=0&ch1=0&ch=a&ch=A&ch0;thenx=5/x-2*3;endDoch=getchar;progp+=ch;实现原理词法分析器的设计构造单词的分类表单词的分类:构造上述语言中的各类单词符号及其分类码表如下:ID和NUM的正规定义式为:IDletter(letter|didit)*NUMdi

9、gitdigit*lettera|z|A|Zdigit0|9如果关键字、标识符和常数之间没有确定的算符或界符作间隔,则至少用一个空格作间隔。空格由空白、制表符和换行符组成。(二)主要实验代码:.全局变量:charprog80=0,/存放程序chartoken8;/存放构成单词符号的字符串charch;/输入字符intsyn,/存放单词字符的种别码sum,/存放整数型单词p,/p是缓冲区prog的指针n=-1;/记录标识符在符号表中的位置char*keyword6=else,if,int,while,void,return;.main函数输入源程序:doch=getchar();progp+=c

10、h;while(ch!=#);循环调用子函数:doscaner();switch(syn)case11:printf(%d,%d)n,syn,sum);break;case-1:printf(nERROR;n);break;default:printf(%d,%s)n,syn,token);while(syn!=0);.子函数:数据初始化及定义:voidscaner()m=0;sum=0;for(n=0;n中的表示相等关系的单词“=”改为“=”char*relation6=,=,;把其中的=改成=即可3)将原来无小数的数改为可以有小数的数把while(isdigit(buffer)改成whil

11、e(isdigit(buffer)|buffer=.)?用C语言开发词法分析程序。读入用PL/0语言编写的测试用例源程序,将识别出的一个个单词组成单词流依序同时输出到屏幕和文件中。六.实验步骤1)根据修改词法后的PL/0语言编写测试用例源程序。2)用C语言编写词法分析程序。读入PL/0语言的测试用例源程序,进行词法分析,将识别出的一个个单词组成单词流依序同时输出到屏幕和文件中。3)设立断点,单步运行词法分析程序,依次单个输出单词。分析和理解词法分析程序,解释词法分析程序中的数据和变量变化的原因和输出结果。七.实验结果关键字:beginifthenwhiledoend所有的关键字都是小写。运算符

12、和界符:=+-*/=;()#其他单词是标识符和整型常数,通过以下正规式定义:ID=letter(letter|digit)*NUM=digitdigit*空格有空白、制表符和换行符组成。空格一般用来分隔ID、SUM、运算符、界符和关键字,词法分析阶段通常被忽略。各种单词符号对应的种别码:表各种单词符号对应的种别码词法分析程序的功能:输入:所给文法的源程序字符串。输出:二元组构成的序列。其中:syn为单词种别码;token为存放的单词自身字符串;sum为整型常数。例如:对源程序beginx:=9:ifx9thenx:=2*x+1/3;end#的源文件,经过词法分析后输出如下序列:(1,begin

13、)(10,x)(18,:=)(11,9)(26,;)(2,if)三、词法分析程序的算法思想:算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。主程序示意图:主程序示意图如图3-1所示。其中初始包括以下两个方面:关键字表的初值。关键字作为特殊标识符处理,把它们预先安排在一张表格中,当扫描程序识别出标识符时,查关键字表。如能查到匹配的单词,则该单词为关键字,否则为一般标识符。关键字表为一个字符串数组,其描述如下:Char*rwtab6=“begin”,“if”,“then”,“while”,“do”,“end”,;图3-1程序中需要用到的主要变量为syn,token和sum扫描子程序的算法思想:首先设置3个变量:token用来存放构成单词符号的字符串;sum用来整型单词;syn用来存放单词符号的种别码。扫描子程序主要部分流程如图3-2所示。图3-2四、词法分析程序的源代码:#include#include#include#includecharprog80,token8,ch;intsyn,p,m,n,sum

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

最新文档


当前位置:首页 > 办公文档 > 总结/报告

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