- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
无符号实数识别
例,文法G[无符号数],若把非终结符号无符号数、余留无符号数、十进小数、小数部分、指数部分、整指数及余留整指数分别用编号0,1,2,……6代表,并用1,2和6代表终态,则按上述方法所构造的状态转换图如图1所示。
对于文法G[无符号数]的状态图1,可按表1的形式来存放其状态矩阵。表中,第一列为各状态的编号,第二列分别列出了在每一状态下可扫视到的输入字符(其中“other”是一个集合符号,用来表示在相应状态所属的那一栏中,除其前所列字符之外的全部其它字符),第三列指出当(Si,ai)出现时应执行的语义动作(通常用若干个语句来实现,若其为空,则表示不进行任何处理),最后一栏用来指明下一状态的编号(若其为NULL或“结束”则表示无后继状态)。
表1 识别无符号数的状态矩阵
当前状态 扫视字符 语义处理操作或接受动作 后继状态 0 d {n=0;p=0;e=1;w=d} 1 · { W=0;n=0;p=0;e=1} 3 other 识别失败 NULL 1 d {w=w*10+d} 1 · 2 E 4 other {回送整常数ICON=w} 结束 2 d {n++;w=w*10+d} 2 E 4 Other {回送实常数FCON=w-pow(10,e-p-n)} 结束 3 d {n++;w=w*10+d;} 2 Other 识别失败 NULL 4 d {p=p*10+d} 6 + 5 - {e=-1;} 5 other 识别失败 NULL 5 d {p=p*10+d;} 6 other 识别失败 NULL 6 d {p=p*10+d;} 6 other {回送实常数FCON=w*pow (10,e*p-n)} 结束 在状态矩阵(表3-1)中所嵌入的语义动作,其功能是在扫描源程序字符串的过程中,把识别出的字符串形式的无符号数,逐步转换为相应的二进制整数(ICON)或二进制实数(FCON)的内部形式,方法如下。
设无符号数有如下的一般形式
dmdm-1…d1d0·d-11d-2…d-nE±dd…d
或改写为
dmdm-1…d1d0·d-11d-2…d-n×10±dd…d-n
并引入下面的变量:
w —尾数累加器(初值为0)
p —指数累加器(初值为0)
n —十进制小数位数计数器(初值为0,当扫视到小数点后的数字时开始计数);
e —用来记录十进制指数的符号(初值为1,当遇到E后的负号时再改为-1)。
利用上述变量,可将一个无符号数写成
N=w*10e*p-n
其中
w=(…((dm*10+dm-1)*10+dm+2)*10+…)10+d-n
p=(…(d*10+d)*10+d…)*10+d
于是,语义加工可按如下的步骤进行:
1.处理整数部分 当遇到小数后的每一位数字d时,做
w=w*10+d
2.处理十进制小数部分 当遇到小数后的每一位数字d时,做
w=w*10+d
n=n+1
3.处理指数部分
(1)若扫视到E之后的负号,做
e=-1
(2)当扫视到十进制指数中的每一位数字时,做
p=p*10+d
4.在识别程序的出口(即下一状态为终态时),按公式
ICON=w
或
FCON=w *10e*p-n
分别计算和回送无符号数的二进制整数和二进制浮点数的内部表示,然后退出识别程序。
据此,可写出识别无符号数的程序如程序3-3所示。
程序3-3 无符号数的识别程序
1 #include<stdio. h>
2 #include<ctype. h>
3 #include<math. h>
4 #define LETTER 0
5 #define DIGIT 1
6 #define POINT 2
7 #define OTHER 3
8 #define POWER 4
9 #definePLUS 5
10 #defineMINUS 6
11 #defineClassNo100 //Suppose the class of number is 100
12 #define ClassOther 200
13 #define EndState -1
14 int w, n, p, e, d;
15 int Class; //Used to indicate class of the word
16 int ICON;
17 float FCON;
18 static int CurrentState; //Used to present current state, the initial value:0
19
20 int GetC
文档评论(0)