编译原理实验一词法分析.docx

编译原理实验一词法分析.docx

ID:59134952

大小:553.80 KB

页数:8页

时间:2020-09-12

编译原理实验一词法分析.docx_第1页
编译原理实验一词法分析.docx_第2页
编译原理实验一词法分析.docx_第3页
编译原理实验一词法分析.docx_第4页
编译原理实验一词法分析.docx_第5页
资源描述:

《编译原理实验一词法分析.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《编译原理》(2014-2015学年第1学期)实验报告学号:58姓名:胡冰倩班级:12计科3班实验一:词法分析程序一、实验目的1、构造一个《科学计算器》的词法分析程序,程序要求能对输入的字符串流进行词法分析。2、在实验的过程中,学会应用词法分析的方法——构造NFA和DFA。二、实验内容和要求1、科学计算器的功能作为一个科学计算器,最重要的自然是能够计算,以下是罗列的一些可以实现的功能:1)基本四则运算2)三角函数计算3)指幂运算4)表达式求值5)log运算6)提供一些基本常数,如PI、e等7)进制转换8)变量存储2、要实现该科学计算器,本次实验首先需要完成词法分析,下面列举

2、4个输入的表达式,:1.0+2*3=1.0+(2*3+cos3)/3.6-6=tg(1.0+(sin2*3+cos3)/3.6-6)=4.0log(1.0+(sin2*3+cos3)/3.6-6)=期望程序能根据实现的DFA对任给的一个输入串进行词法分析,程序的输出为单词的token序列$(CLASS,VALUE)。CLASS中存放类别,VALUE中存放token的值,如第一个算式,其输出为:$(CLASS,VALUE)$(number,1.0)$(plus,+)$(number,2)$(mul,*)$(number,3)关于TOKEN的分类(CLASS),可将所有标识符归

3、为一类;将常数归为另一类;保留字和分隔符则可采取一词一类。对于变量标识符和常数,CLASS字段为相应的类别码,VALUE字段则是该标识符、常数在其符号表中登记项的序号。3、程序应通过DFA来完成词法分析。可参考的DFA如下图:图中每一个箭头表明一个字符的输入,由于这个输入,自动机从一个状态变为另一个状态。同学们可以根据自己的理解自行设计DFA。该DFA需能够识别本实验中要实现的科学计算器的所有TOKEN。采用有限自动机(DFA)进行分析,对于特定符号如+、-、*、/、%、(、)、!、^、=,为每一个符号提供一个状态、而其他的一些由字母组成的符号,如ans、pi、sto、cl

4、r等,则作为是一个词,之后再对词进行分类处理。(提示:可以参考教材中lex部分的章节,DFA的实现同学们可以使用lex实现(自行搜索下载),也可以自已编码实现。)三、分析过程及源代码1.token的分类将一些由字母组成的函数及常数,如:PI、e、sin、cos、tan、log等归为一类,+、-、*、/、%、(、)、=、^等采用一次一类、把数字归为一类。类别CLASStokenwordPI、e、sin、cos、tg、lognumner0及所有正数plus+minus-mul*div/mod%pow^equ=2.有限状态机状态图3.词法分析器的数据结构与算法1234567891

5、011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556#include#include#includeusingnamespacestd;charprog[80],token[8];charch;stringCLASS;intp,m=0,n;char*word[6]={"PI","e","log","sin","cos","tg"};voidscaner(){for(n=0;n<8;n++)t

6、oken[n]=NULL;//把token数组初始化ch=prog[p++];while(ch==''){ch=prog[p];p++;}if((ch>='a'&&ch<='z')

7、

8、(ch>='A'&&ch<='Z'))//如果是字母,则这个token是词{m=0;while((ch>='a'&&ch<='z')

9、

10、(ch>='A'&&ch<='Z')){token[m++]=ch;ch=prog[p++];}p--;CLASS="word";}elseif((ch>='0'&&ch<='9'))//数字{{m=0;while((ch>='0'&&ch<='9')

11、

12、(c

13、h=='.')){token[m++]=ch;ch=prog[p++];}}//把数字由字符类型转化为整数类型CLASS="number";p--;}elseswitch(ch)//其他字符{case'*':CLASS="mul";token[0]=ch;break;case'/':CLASS="div";token[0]=ch;break;case'+':CLASS="plus";token[0]=ch;break;case'-':CLASS="minus";token[0]=ch;break;case'=':C

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

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

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