实验编译原理作业一

实验编译原理作业一

ID:30883797

大小:201.25 KB

页数:10页

时间:2019-01-03

实验编译原理作业一_第1页
实验编译原理作业一_第2页
实验编译原理作业一_第3页
实验编译原理作业一_第4页
实验编译原理作业一_第5页
资源描述:

《实验编译原理作业一》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验报告实验Fl期:年月H星期实验项目名称实验项目类型□演示型□验证型□基本训练型□综合型□设计型□提高型实验指导教师实验地点是否分组小组其他成员一、实验目的及要求二、实验使用的主要设备(含软件系统)三、实验操作过程及内容⑴无符号实数词法分析的思想。对构成源程序的字符串从左至右逐个字符地对源程序进行扫描,产生单词序列,并用语言的词法规则识别出一个个具有独立意义的单词符号.⑵无符号实数的文法和根据文法生成的状态转换图(即有穷门动机)。将G[〈无符号数>]文法转换成有穷自动机:构造状态矩阵;将有穷自动机的状s,S2……Sn及输入的字a,a2……am构成一个n*

2、m的矩阵。入状态、d■e8+/-01241124z23334z4655666zZ再写一个程序,把状态矩阵用二维数组表示。程序通过输入的字符转换状态,从而可以识别出单词。木程序的关键在状态表和缓冲区的运用。首先定义了一个布尔型函数ReadALine把输入的字符串送到缓冲区中;然后定义了布尔型函数Run和Getchar实现对输入字符串的正确性判断,更改Run函数可以改变程序功能:如可将状态表改变成识别“偶数”的冇限自动机的状态表。⑶程序处理的流程图无符号实数的流程图开始丿结束代码实现:#include//引入库函数#include

3、io.h>//引入基本的库函数#include〈string.h>//引入字符串的库函数//状态表相关存储信息:#defineSTATE_NUMBER7//状态数目#defineCHAR_NUMBER4//输入字符的种类:.;d;e/E;+/-#defineDOT0//输入数字在状态表中位于第0列#defineDIGIT1//小数点位于状态表的第1歹IJ#defineE2//E位于状态表的第2列#defineAD3//+/-运算符位于状态表的第3列//State□□为状态表,以整数组形式存放,0,1,2,3,4,5,6表示状态,-1表示没有此状态intSt

4、ate[STATE_NUMBER][CHAR_NUMBER]={{1,2,3,-1},{-1,4,-1,-1],{1,2,3,-1},{-1,5,-1,6},{一1,4,3,-1},1-1,5,-1,-1),{-1,5,-1,-1}};intQ[STATE_NUMBER]二{0,0,1,0,1,1,0};〃终态标志:0非终态,1终态。intindex=0;//错误坐标//缓冲区://输入缓冲区:由专门函数操作(ReadALineO,GetChar0)#defineBUFFER_SIZE1000//表达式缓冲区大小charBuffer[BUFFER_SIZE

5、];//表达式缓冲区,以’'表示结束intipBuffer二0;//表达式缓冲区当前位置序号charch;//存放取得的一个字符//函数声明:intRun();〃对存储在缓冲区的一行字符串(以'*'结束)进行运行voidInit();//全局初始化intReadALineO;//从键盘读一行(没有空格),存于表达式缓冲区Buffer[]中charGetChar();//从缓冲区取一个字符,返回该字符的同时将它存于全局变量ch中//主程序:voidmain(){InitO;whiIe(ReadALineO)//读一行成功,对它进行判断{if(Run0)/

6、/对该行进行运行,看是否能被接受?printf("Thenumberisright!rT);eIse{printf(,zThenumberiserror!,z);printfC错误位置在第%01个字符!",index);//显示错误位置}}}//对存储在缓冲区的一行字符串(以结束)进行运行//返回:如果是无符号定点实数,返回true;否则返回:falseintRun(){intS二0;//S存放运行时的当前状态,目前为初态index二0;while(GetChar()!二'*'){index++;if(ch>='O'&&ch<='9')/

7、/数字S二State[S][DIGIT];//将状态转换成输入数字后的状态elseif(ch=//小数点S二State[S][DOT];//将状态转换成输入小数点后的状态eIseif(ch二二’e'

8、

9、ch二二’E')//eS二State[S][E];//将状态转换成输入e后的状态eIseif(ch--,+'

10、

11、ch--,-')//+或-符号S二State[S][AD];//将状态转换成输入+或-后的状态elseif(ch=NULL)return0;else〃其他都为非法字符return0;if(S==-1)//处于非法状态return0;}//运行结束,

12、判断S是否为终态if(Q[S]=1)//终态return1;eIs

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。