java词法分析器实验报告.docx

java词法分析器实验报告.docx

ID:50384578

大小:48.20 KB

页数:15页

时间:2020-03-05

java词法分析器实验报告.docx_第1页
java词法分析器实验报告.docx_第2页
java词法分析器实验报告.docx_第3页
java词法分析器实验报告.docx_第4页
java词法分析器实验报告.docx_第5页
资源描述:

《java词法分析器实验报告.docx》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Java词法分析器实验报告--07111101--奥特曼一.词法分析器功能概述:1.使用DFA实现词法分析器的设计;2.实现对Java源程序中注释和空格(空行)的过滤;3.利用两对半缓冲区从文件中逐一读取单词;4.词法分析结果属性字流存放在独立文件(c:words.txt)中;5.统计源程序所有单词数以、错误单词数、单词所在的行数;6.具有报告词法错误和出错位置(源程序行号)的功能;二.源程序设计实现://程序大部分参照网络,自己做了小部分改动#include#include#include

2、tdio>#include#include#include"const.h"usingnamespacestd;charrbuf[RBUFSIZE];//读文件缓冲区intrp;//读文件缓冲区指针charch;//当前扫描到的字符inttype;//单词的类型charsbuf[SBUFSIZE];//单词字符串缓冲区intsp;//单词字符串缓冲区指针ifstreaminFile;//输入文件ofstreamoutFile;//输出文件voidclear_rbuf()//清空读文件缓冲区{inti;

3、for(i=0;i

4、TH;i++){if(!strcmp(msg,ATTR_MAP[i].keyword)){type=ATTR_MAP[i].type;return;}}return;}intdigit(intbase)//判断字符是否属于base进制并转换{charc=ch;intresult;if(c>='0'&&c<='7')result=(int)(c-'0');elseif(c>='8'&&c<='9'){if(base>8)result=(int)(c-'0');elseresult=-1;}elseif(c>='a'&&c<='f'){if

5、(base>10)result=(int)(c-'a'+10);elseresult=-1;}elseif(c>='A'&&c<='F'){if(base>10)result=(int)(c-'A'+10);elseresult=-1;}elseresult=-1;returnresult;}voidscan_fraction()//扫描指数{while(digit(10)>=0){put_ch(ch);get_ch();}if(ch=='e'

6、

7、ch=='E'){put_ch(ch);get_ch();if(ch=='+'

8、

9、ch==

10、'-'){put_ch(ch);get_ch();}while(digit(10)>=0){put_ch(ch);get_ch();}return;}return;}voidscan_suffix()//扫描浮点数后缀{scan_fraction();if(ch=='f'

11、

12、ch=='F'

13、

14、ch=='d'

15、

16、ch=='D'){put_ch(ch);get_ch();}type=T_FLOAT;return;}boolis_spectial(char&ch)//判断字符是否是特殊字符{if(ch=='!'

17、

18、ch=='%'

19、

20、ch=='

21、&'

22、

23、ch=='*'

24、

25、ch=='?'

26、

27、ch=='+'

28、

29、ch=='-'

30、

31、ch==':'

32、

33、ch=='<'

34、

35、ch=='='

36、

37、ch=='>'

38、

39、ch=='^'

40、

41、ch=='

42、'

43、

44、ch=='~')returntrue;elsereturnfalse;}voidscan_operator()//扫描运算符{while(is_spectial(ch)){put_ch(ch);get_ch();}get_type(sbuf);if(type==0)type=T_ERROR;return;}voidscan_number(intradi

45、x)//扫描8、10、16进制数值{while(digit(radix)>=0){put_ch(ch);get_ch();}if(radix!=10&&ch=='.'){put_ch(ch);get_ch(

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

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

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