网站大量收购闲置独家精品文档,联系QQ:2885784924

j小ava实f现的词法分析.docx

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验一:词法分析器 一、 词法分析器程序的实验综述 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 系统开发流程图 词法分析器程序 一 词法分析器程序的实验综述 1.1开发背景 编译原理涉及词法分析,语法分析,语义分析及优化设计等各方面。词法分析阶段是编译过程的第一个阶段,是编译的基础。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用Lex等工具自动生成。从左到右逐个字符对构成源程序的字符串进行扫描,依据词法规则,识别出一个一个的标记(token),把源程序变为等价的标记串序列。执行词法分析的程序称为词法分析器,也称为扫描器。词法分析是所有分析优化的基础,涉及的知识较少,如状态转换图等,易于实现。本次实验使用java代码实现。 1.2问题介绍 对某特定语言A ,构造其词法规则。 A的内容如下: 该语言的单词符号包括 1. 保留字 2. 运算符及界符 3. 标识符(字母大小写不敏感),整型常数 1.3词汇表 对于后文正则式中可能出现的符号定义如下,以便清晰地描述A语言的正则式 符号 说明 a 字母 b 数字 c 符号(不包括字母和数字) * 闭包运算符 | 或运算符 . 连接运算符(可省略) ε 空 # 结束符 二 词法分析器程序的系统分析 2.1词法形式化描述 正则式 意义 举例 a(a|b)* 标识符或保留字 Lex1, program b* 常数 12345 c 运算符或界符或非法字符 +,*,(,)等 2.2单词种别定义 program 1 not 8 常数 15 . 22 begin 2 if 9 + 16 ; 23 end 3 then 10 * 17 // 24 var 4 else 11 := 18 /* 25 int 5 while 12 ( 19 */ 26 and 6 do 13 ) 20 or 7 标识符 14 , 21 对于标识符或保留字的推导 对于常数的推导 对于符号的推导 2.3状态转换图 其中: 识别标识符或保留字 识别常数 识别加运算符 识别乘运算符 识别赋值运算符 识别大于等于运算符,大于运算符并加以区分 识别小于等于运算符,不等于运算符,小于运算符并加以区分 识别括号,逗号,点号,分号,等于号 其余所有无法被此状态转换图识别的符号视为非法符号。 三 词法分析器程序系统设计 3.1 运行环境介绍 词法分析器程序由一个java控制台程序实现,通过读入一个名为A.txt的文本文件中的测试代码来对其进行词法分析。 开发环境:MyEclipse 8.5,jdk1.6 系统流程图: 3.2关键算法流程图及文字解释 词法分析程序(Analysis函数)详细流程图如下: void analysis() throws Exception { StringBuffer lexSegment=new StringBuffer(); StringBuffer digitSegment=new StringBuffer(); //char next; try { while(true) { program=in.readLine(); if(program==null) { if(line==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); //isFi

文档评论(0)

zzabc003 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档