编译原理实验4算符优先算法.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文档。上传文档
查看更多
编译原理实验4算符优先算法 编译原理实验4算符优先算法 PAGE 编译原理实验4算符优先算法 一、实验目的与任务 算术表达式和赋值语句的文法可以是(你可以根据需要适当改变): S→i=E E→E+E|E-E|E*E|E/E|(E)|i 根据算符优先分析法,将赋值语句进行语法分析,翻译成等价的一组基本操作,每一基本操作用四元式表示。 二、实验涉及的相关知识点 算符的优先顺序。 三、实验内容与过程 如参考C语言的运算符。输入如下表达式(以分号为结束): (1)a = 10; (2)b = a + 20; 注:此例可以进行优化后输出(不作要求):(+,b,a,20) (3)c=(1+2)/3+4-(5+6/7); 四、实验结果及分析 (1)输出:(=, a,10,-) (2)输出:(=,r1,20,-) (+,r2,a,r1) (=,b,r2,-) (3)输出:(+,r1,1,2) (/,r2,r1,3) (/,r3,6,7) (+,r4,5,r3,) (+,r5,r2,4) (-,r6,r5,r4) (=,c,r6,-) 五、实验有关附件(如程序、附图、参考资料,等) ... ... h == #) o][Peek(n0).No]; if(r == ) h == E Peek(1).ch == # Token[ipToken].ch == #) return TRUE; else return FALSE; } h) { k = TRUE; h == E) { n ++; } return n; } 词结束(遇到“#”号),无法移进,需要规约,返回:1 词没有结束,需判断是否可以移进 栈单词=单词:移进后返回:2 栈单词单词:不能移进,需要规约,返回:1 单词没有优先关系:出错,返回:-1 int MoveIn() { SToken s,t; h = #; Token[TokenNumber].No = O_NUL; return TRUE; h = +; Token[TokenNumber].No = O_PLUS; GetChar(); break; case -: Token[TokenNumber].ch = -; Token[TokenNumber].No = O_MINUS; GetChar(); break; case *: Token[TokenNumber].ch = *; Token[TokenNumber].No = O_TIMES; GetChar(); break; case /: Token[TokenNumber].ch = /; Token[TokenNumber].No = O_SLASH; GetChar(); break; case (: Token[TokenNumber].ch = (; Token[TokenNumber].No = O_L_PAREN; GetChar(); break; case ): Token[TokenNumber].ch = ); Token[TokenNumber].No = O_R_PAREN; GetChar(); break; default: if(ch = 0 ch = 9) h = i; Token[TokenNumber].No = O_IDENT; } else { return ! MakeErr(表达式中含有非法字符。); } break; } TokenNumber ++; } } //从表达式缓冲区中取到下面第一个非空字符 //成功:返回字符;不成功:返回\0 char GetFirstChar() { while(GetChar() != \0) { if(ch32) return ch; } return \0; } //从表达式缓冲区取一个字符,返回该字符的同时将它存于全局变量ch中 //成功:返回字符;不成功:返回\0 char GetChar() { if((ch = Buffer[ipBuffer]) != \0) ipBuffer ++; return ch; } //生成错误信息 //错误信息存于全局变量ErrMsg中 //返回:TRUE bool MakeErr(char * ErrMassage) { ErrMsg = ErrMassage; ret

文档评论(0)

186****7897 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档