编译原理代码(Compiler principle code).doc

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理代码(Compiler principle code)

编译原理代码(Compiler principle code) /////////////////////////////////////////////////////////////////// / / / /董超勋的为循环语句翻译递归下降法输出三地址码///////////// #定义最大100 #包括 iostream。” #包括 stdio. h #包括字符串。” 字符[最大]; ch; int转; 焦strtoken [最大]; int类型; int n = 0;//存放strtoken [ ]元素的个数 结构词/结构体存放单词 { int类型; 焦字[最大];//存放strtoken [ ]的内容 }; //记录新单词; 词*记录[ 12 ];//放所有识别出来的单词,分别存放他们的编号以及字符串,X是其下标 ////////////////////词法分析/////////////////////// 国际buffer() /载入 { int = i 0; cout “输入程序,以”#”作为结束标志 endl。”; 为(int = 0;n max =;+ +) { 为((i = max;i + +)) { scanf(“%c”,与STR [我]); ///////////// CIN STR [我]不可用,用C语言读入字符。 如果(STR [我] = =“#”) 打破;///////如果尾数为识别码#,则表示程序读完,跳出循环。 } 打破; } 返回(i); } bool IsLetter(ch)///////////判断是否是字母 { 如果(CH = 65和CH = 90 | | CH = 97和CH = 122) 返回(true); 其他的 返回(false); } bool IsDigit(ch)//////////判断是否是数字 { 如果(= = 48和CH = 57) 返回(true); 其他的 返回(false); } char GetChar(int i)///////读取字符 { ch; [我]; 返回(CH); } 焦getbc(ch)/ / / /判断是不是空格或者换行,如果是,直接读取下一个字符直道不再空白为止 { 如果(CH = = 32 | | CH = = 10) { 转+; CH = getchar(转); CH = getbc(CH);/////////递归实现 返回(CH); } 其他的 返回(CH); } 无效concat() /////////////连接,即为strtoken [ ]赋值 { strtoken [n] = CH; 氮+; } 国际reserve() /////以单词为单位查找保留字,是则返回编码,不是则返回0,用来区分标志符和保留字 { 如果(strcmp(strtoken,“暗0”)= = 0)///////调用strcmp函数实现, 返回(1); 如果(strcmp(strtoken,”0“)= = 0) 返回(2); 如果(strcmp(strtoken,“步骤0”)= = 0) 返回(3); 如果(strcmp(strtoken,直至“0”)= = 0) 返回(4); 如果(strcmp(strtoken, “做\ 0”= = 0) 返回(5); 其他的 返回(6); } 无效clear() { n=0; } ///////////// * * /////////////////语法递归分析 int(int,int,int和q) { 如果(c = ++ = 3) { 如果(c = q=7) { + +; 返回1; } 别的{ cout “步右部出错” endl;return 0;} }否则{ cout “错误的步骤” endl;return 0;} } int(int * b,int和o) { 如果(b + + = 4) { 如果(b = 7) { + +; 返回1; } 别的{ cout “直到右部出错” endl;return 0;} }否则{ cout “错误”到“ endl;return 0;} } int(int,d,int和h) { 如果(d = ++ = 6) { 如果(d = ++ = 8) { 如果((D [H] = = 6 | | D [H] = = 7)){ H + +;return 1;} 别的{ cout “赋值语句右部出错” endl;return 0;} }否则{ cout “赋值语句缺少赋值运算符” endl;return 0;} }否则{ cout “赋值语句左部出错” endl;return 0;} } int(int,m,int和n) { 如果(S2,m,n) { 如果(a,m,n) { 如果(

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档