无符号实数识别.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

phltaotao + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档