- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
v1.0可编写可改正
实验2词法剖析程序的设计
一、实验目的
掌握计算机语言的词法剖析程序的开发方法。
二、实验内容
编制一个能够剖析三种整数、表记符、主要运算符和主要重点字的词法剖析程序。
三、实验要求
1、依据以下的正规式,编制正规文法,画出状态图;
表记符
字母(字母|数字字符)*
十进制整数
0|((1|2|3|4|5|6|7|8|9
)(0|1|2|3|4|5|6|7|8|9
)*)
八进制整数
0(1|2|3|4|5|6|7
)(0|1|2|3|4|5|6|7
)*
十六进制整数
0x
(
0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f
)
(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f
)*
运算符和界符
+-*/=
( )
;
重点字
ifthenelsewhiledo
2、依据状态图,设计词法剖析函数
intscan( )
,达成以下功能:
1)从文本文件中读入测试源代码,依据状态变换图,剖析出一个单词,
2)以二元式形式输出单词单词种类,单词属性
此中单词种类用整数表示:
0:表记符
1:十进制整数
2:八进制整数
3:十六进制整数
运算符和界符,重点字采纳一字一符,不编码
此中单词属性表示以下:
表记符,整数因为采纳一类一符,属性用单词表示
运算符和界符,重点字采纳一字一符,属性为空
3、编写测试程序,频频调用函数scan( ),输出单词种别和属性。
四、实验环境
1
v1.0可编写可改正
PC微机
DOS操作系统或Windows操作系统
TurboC程序集成环境或VisualC++程序集成环境
五、实验步骤
1、依据正规式,画出状态变换图;
空白
字母或数字
字母
非字母与数字
*
0
1
2
0~9
1~9
非数字
*
3
4
0
非1~7与x
0~7
*
1~7
非0~7
5
6
7
x
0~9
0~9或
*
或
非0~9与a~f
8
9
10
+或—或*
或/
或或或=或(或)
11
ifthenelsewhiledo
12
2、依据状态图,设计词法剖析算法;
察看状态图,此中状态
2、4、7、10(右上角打了星号)需要回调一个字符。
申明一些变量和函数:
ch:字符变量,寄存最新读进的源程序字符。
strToken:
字符串变量,寄存组成单词符号的字符串。
GetChar( ):
子函数,将下一输入字符读到
ch中,搜寻指示器前移一字符地点。
GetBC( ):
子函数,检查
ch中的字符能否为空白。假如,则调用
GetChar( )直至ch
中进入一个非空白字符。
Concat( ):
子函数,将ch中的字符连结到
strToken以后。
IsLetter( ):
布尔函数,判断
ch中的字符能否为字母。
IsDigit( ):
布尔函数,判断
ch中的字符能否为数字。
2
v1.0可编写可改正
Reserve( ):整型函数,对strToken中的字符串查找保存字表,若它是一个
保存字则返回它的编码,不然返回0。
SearchOp( ):整型函数,对ch查找运算符和界符,若它是一个运算符或界符,则
返回它的编码,不然返回0。
Retract( ):子函数,将搜寻指示器回调一个字符地点,将ch置为空白字符。
ProError( ):错误办理函数。
重点字保存在字符数组中,定义编码为相对数组首地点的地点+1。保存子表次序
以下:{if,then
,else,while,do},则相应编码为:
1,2,3,4,5。
运算符和界符保存在字符数组中,编码定义与重点字同样,次序以下:
{+,-,*,
/,,,=,(,),
;},编码为:1~10。
二元表
单词
单词种类
属性
表记符
0
单词自己
十进制整数
1
单词自己
八进制整数
2
单词自己
十六进制整数
3
单词自己
运算符和界符
单词自己
-
重点字
单词自己
-
算法以下:
ch=’‘;strToken=””;
GetBC( );
if(IsLetter( )){
while(IsLetter( )||IsDigit( ))
{Concat( );GetChar( );}
Retract( );
If(Reserve( ))printf(%s,-,strToken);
elseprintf(,0,%s,strToken);
}
elseif(‘1’=chch=’9’){
while(IsDigit( ))
{Concat( );GetChar( );}
3
v1.0可编写可改正
Retract( );
printf(,1,%s,strToken);
}
elseif(ch==’0’){
GetChar( );
if(ch=‘1’ch=‘7’){
while(ch=‘0’ch=‘7’)
{Concat( );
您可能关注的文档
最近下载
- 胫骨平台骨折-课件-课件--.pptx VIP
- 脓毒症休克的中医诊治进展.ppt VIP
- 道亨SLW2D架空送电线路平断面处理及定位设计系统(2019版)(定位部分)_操作说明.doc VIP
- 医疗机构抗菌药物目录备案表.docx VIP
- 铝锭采购函模版.docx VIP
- 《旅游学概论》 教案 第16课 旅游的影响(二).pdf VIP
- 《森林资源资产评估》课件——森林资源资产评定估算.pptx VIP
- 中资企业在泰国发展报告(2024-2025).pdf
- 人教版高中英语必修第一册《UNIT 5 LANGUAGES AROUND THE WORLD》大单元整体教学设计.docx
- 中考英语高频词汇及短语汇总.docx VIP
原创力文档


文档评论(0)