java实现的词法分析

java实现的词法分析

ID:12562192

大小:565.98 KB

页数:22页

时间:2018-07-17

java实现的词法分析_第1页
java实现的词法分析_第2页
java实现的词法分析_第3页
java实现的词法分析_第4页
java实现的词法分析_第5页
资源描述:

《java实现的词法分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《编译原理综合训练》课程设计报告实验一:词法分析器一、词法分析器程序的实验综述1.1开发背景1.2问题介绍1.3词汇表二、词法分析器程序的系统分析2.1词法形式化描述2.2单词种别定义2.3状态转换图三、词法分析器程序的系统设计3.1运行环境介绍3.2关键算法流程图及文字解释3.3用于处理注释的skip函数3.4基于trie树的保留字搜索函数3.5系统运行与调试四、系统测评设计系统界面设计数据结构收集材料运行并测试编辑代码了解系统功能图0系统开发流程图22《编译原理综合训练》课程设计报告词法分析器程序一词法分析器程序的

2、实验综述1.1开发背景编译原理涉及词法分析,语法分析,语义分析及优化设计等各方面。词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用Lex等工具自动生成。从左到右逐个字符对构成源程序的字符串进行扫描,依据词法规则,识别出一个一个的标记(token),把源程序变为等价的标记串序列。执行词法分析的程序称为词法分析器,也称为扫描器。词法分析是所有分析

3、优化的基础,涉及的知识较少,如状态转换图等,易于实现。本次实验使用java代码实现。1.2问题介绍对某特定语言A,构造其词法规则。A的内容如下:该语言的单词符号包括1.保留字22《编译原理综合训练》课程设计报告1.运算符及界符2.标识符(字母大小写不敏感),整型常数1.3词汇表对于后文正则式中可能出现的符号定义如下,以便清晰地描述A语言的正则式符号说明a字母b数字c符号(不包括字母和数字)*闭包运算符

4、或运算符.连接运算符(可省略)ε空#结束符二词法分析器程序的系统分析2.1词法形式化描述正则式意义举例22《编译原理综

5、合训练》课程设计报告a(a

6、b)*标识符或保留字Lex1,programb*常数12345c运算符或界符或非法字符+,*,(,)等2.2单词种别定义program1not8常数15.22begin2if9+16;23end3then10*17//24var4else11:=18/*25int5while12(19*/26and6do13)20or7标识符14,21对于标识符或保留字的推导对于常数的推导对于符号的推导2.3状态转换图22《编译原理综合训练》课程设计报告其中:22《编译原理综合训练》课程设计报告识别标识符或

7、保留字识别常数识别加运算符识别乘运算符识别赋值运算符识别大于等于运算符,大于运算符并加以区分识别小于等于运算符,不等于运算符,小于运算符并加以区分22《编译原理综合训练》课程设计报告识别括号,逗号,点号,分号,等于号其余所有无法被此状态转换图识别的符号视为非法符号。三词法分析器程序系统设计3.1运行环境介绍词法分析器程序由一个java控制台程序实现,通过读入一个名为A.txt的文本文件中的测试代码来对其进行词法分析。开发环境:MyEclipse8.5,jdk1.6系统流程图:22《编译原理综合训练》课程设计报告3.2关

8、键算法流程图及文字解释词法分析程序(Analysis函数)详细流程图如下:22《编译原理综合训练》课程设计报告voidanalysis()throwsException{StringBufferlexSegment=newStringBuffer();StringBufferdigitSegment=newStringBuffer();//charnext;try22《编译原理综合训练》课程设计报告{while(true){program=in.readLine();if(program==null){if(line=

9、=0){System.out.println("文件为空,");break;}else{System.out.println("文件已编译完成");break;}}else{line++;column=-1;lineLength=program.length()-1;while(column++<=lineLength-1){now=program.charAt(column);if(now=='')continue;//System.out.println(now);//isFinished=false;elseif

10、(Character.isDigit(now)){next=now;//column++;while(Character.isDigit(next)){digitSegment.append(next);column++;if(column>lineLength)break;next=program.charAt(column);

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

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

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