- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- bSmartpohone系统整合技术.doc
- hSHEO P-008文件控制程如序(R1.0).doc
- Javascript_DOM编程艺术中最文部分翻译版.doc
- iSCM与ERPr的区别.doc
- MPython实入门教程.doc
- PP6T经常用E的115个技巧.doc
- PpPh管道施工方案.doc
- java成实训报告(简单人事管理系统的设计与实现).doc
- PPTj演讲大赛S策划书.doc
- Java程3序员要点总结.doc
- 2025年中国非公路用电动车行业市场发展现状及投资方向研究报告.docx
- 2020-2025年中国重型汽车起重机行业市场调查研究及投资战略咨询报告.docx
- 2023-2028年中国电力设备开关行业市场发展现状及投资策略咨询报告.docx
- 中国辗环机行业市场深度研究及发展趋势预测报告.docx
- 中国乘用车行业市场调研分析及投资战略咨询.docx
- 中国物流台车行业市场发展现状及投资方向研究报告.docx
- 2025年中国氢燃料汽车行业市场全景评估及投资前景展望报告.docx
- 2025年中国电梯导轨行业市场调查研究及投资潜力预测报告.docx
- 2023-2028年中国互联网+专车行业发展前景预测及投资规划建议报告.docx
- 中国客服机器人行业发展潜力预测及投资战略研究报告.docx
文档评论(0)