欢迎来到第一文库网! | 帮助中心 第一文库网-每个人都是第一
第一文库网
全部分类
  • 研究报告>
  • 学术论文>
  • 全科教育>
  • 应用文档>
  • 行业资料>
  • 企业管理>
  • 技术资料>
  • 生活休闲>
  • ImageVerifierCode 换一换
    首页 第一文库网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    编译原理实验报告-- PL-0编译程序的修改.docx

    • 资源ID:1186585       资源大小:24.13KB        全文页数:11页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    扫码关注公众号登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    编译原理实验报告-- PL-0编译程序的修改.docx

    实验报告课程名称编译原理颗目名称PL/O编译程序的修改学生学院计算机学院有'11/耕级一12级软件4班一、基本内容(成绩范围:“中”、“及格”或“不及格”)对PL/O作以下修改扩充:(1)增力口单词:保留字 ELSE, FOR, STEP, UNTIL, DO,RETURN 运算符 *=, /=, &, , !(2)修改单词:不等号#改为v>(3)增加条件语句的ELSE子句,要求:写出相关文法,语法图,语义 规则。二、设计思路1.扩充单词1)修改变量定义a)先修改保留字的个数COnSt NORW = 19;b)修改枚举变量SYMBOL的个数为43typedef enum NUL, IDENT, NUMBER, PLUS, MINUS, TIMES,Timesequal, slashequal,SLASH, ODDSYM, EQL, NEQ, LSS, LEQ, GTR, GEQ, LPAREN, RPAREN, COMMA, SEMICOLON, PERIOD, BECOMES, BEGINSYM, ENDSYM, IFSYM, THENSYM, WHILESYM, WRITESYM, READSYM, DOSYM, CALLSYM, CONSTSYM, VARSYM, PROCSYM, PROGSYM, ELSESYM, FORSYM, STEPSYM, UNTILSYM, RETURNSYM9 AND, OR,NOT SYMBOL;c)修改SYMOUT数组的个数为43char *SYMOUT = NUL, IDENT, nNUMBERn, nPLUSn, nMlNus V TIMESn9nTIMESEQUALn9 nSLASHEQUALn9 "SLASH", nODDSYMn9 EQLn, nNEQn, LSSn, ,LEQn, nGTRn, GEQ, hLPARENh, nRPARENn, COMMA, nSEMICOLONn, PERIOD, nBECOMESn, hBEGINSYMh, nENDSYMn, IFSYM, hTHENSYMh, nWHILESYMn, nWRITESYMn, nREADSYMn, DOSYM, nCALLSYMn, nCONSTSYMn, VARSYM, nPROCSYMn, nPROGSYMn, nELSESYMnnFORSYMn9 nSTEPSYMn9 nUNTILSYMn, nRETURNSYMn,AND, OR, NOT);d)增加关键字和保留字strcpy(KWORD 1,nBEGIN); strcpy(KWORD 2,CALLn);strcpy(KWORD 3,nCONST);strcpy(KWORD 4,DO);StrCPy(KWORD 5 JELSE'');StrCPy(KWORD6 JEND");StrCPy(KWORD7 JFoR');strcpy(KWORD 8,IF);StrCPy(KWORD9, "ODD");strcpy(KWORD10,"PROCEDURE");strcpy(KWORD 11, "PROGRAM");strcpy (KWORD 12, nREADn);StrCPy(KWORD13,''RETURN'');StrCPy(KWoRD14,''STEP'');strcpy(KWORD15,THEN);StrCPy(KWoRD16 JUNTlL'');strcpy (KWORD 17,n VARn);strcpy (KWORD 18, WHILE);strcpy(KWORD19,WRITE);WSYM 1=BEGINSYM; WSYM 2=CALLSYM;WSYM 3=CONSTSYM; WSYM 4=DOSYM;WSYM 5=ELSESYM; WSYM6=ENDSYM;WSYM7=FORSYM;WSYM8=IFSYM;WSYM9=ODDSYM;WSYM10=PROCSYM;WSYM11=PROGSYM;WSYM12=READSYM;WSYM13=RETURNSYM; WSYM14=STEPSYM;WSYM15=THENSYM;WSYM16=UNTILSYM;WSYM17=VARSYM;WSYM18=WHILESYM;ws YM 19 =writesym ;e.在STATEMENT方法 中添加case ELSESYM:FOrml>printfs("读取至! ELSE);break;case FORSYM:FOrmI>printfs("读取至(j FORn);break;case STEPSYM:FonnL>printfs(''读取到 STEP);break;case UNTILSYM:FOrmI>printfs("读取到 UNTILn); break;case RETURNSYM:FormL>printfs(''读取至! RETURN);break;case TIMESEQUAL:FOrml>printfs("读取到 *=”); break;case SLASHEQUAL:Forml>printfs("读取到/=");break;case AND:FormI>printfs("读取到&”); break;case OR:FOrml >printfs(''读取至! );break;case NOT:FormL>printfs(,读取至! NOT);break;2)修改GetSym()方法void GetSym() int i,J,K; ALFA A;while (CH<=f,) GetCh();if(CH>=,A, && CH<=,Z,) *ID OR RESERVED WORD*/ K=O;do if(K<AL)AK+=CH;GetCh();while(CH>='A' && CH<=,Z,)(CH>=,O, && CH<='9');AK=,0,;strcpy(ID,A); i=zl; J=NORW;do K=(i+J) / 2;if (strcmp(ID,KWORDK)<=0) J=K-1;if (strcmp(ID,KWORDK)>=0) i=K+l;while(i<=J);if (i-l > J) SYM=WSYMK;If(SYM=ELSESYM) Forml->printfs(ELSE);if(SYM=FORSYM) Forml->printfs(FOR);If(SYM=STEPSYM) Forml->printfs(STEP);If(SYM=UNTILSYM) Forml->printfs(UNTIL);If(SYM=RETURNSYM) Forml->printfs(RETURN);)else SYM=IDENT;)elseif(CH>=,0, && CH<=,9,) /*NUMBER*/K=0; NUM=O; SYM=NUMBER;do NUM=10*NUM+(CH-,0,);K+; GetCh();while(CH>=,0, && CH<=,9,);if(K>NMAX)Error(30);)elseif (CH=T) GetCh();if (CH=,=f) SYM=BECOMES; GetCh(); else SYM=NUL;)else * THE FOLLOWING TWO CHECK WERE ADDEDBECAUSE ASCII DOES NOT HAVE A SINGLE CHARACTERFOR <= OR >= */if (CH=,<,) GetCh();if (CH=,) SYM=LEQ; GetCh(); else if(CH=,>,) SYM=NEQ; GetCh(); else SYM=LSS;elseif (CH=,>,) GetCh();if (CH=,=, SYM=GEQ; GetCh(); else SYM=GTR;)elseif(CH=W)GetCh();添加运算符*二if (CH=,) SYM=TIMESEQUAL; GetCh(); else SYM=TIMES;)elseif(CH=7,)GetCh();添加运算符/二if(CH=,=,> SYM= SLASHEQUAL, GetCh();) else SYM=SLASH;)elseif(CH=,) SYM= AND, GetCh(); 添加运算符&elseif(CH=,)GetCh();if(CH=T) SYM= OR, GetCh(); 添加运算符 else SYM=NUL;)elseif(CH=,!,) SYM= NOT, GetCh(); 添加运算符!else SYM=SSYMCH; GetCh(); /*GetSym()*/2 .修改单词:不等号#改为<>a.在文件中的设置单字符符号的部分,将SSym铲=NEQ删除。b.在GetSym()方法中elseif (CH=T) GetCh();if (CH=,=t) SYM=BECOMES; GetCh(); else SYM=NUL;)else * THE FOLLOWING TWO CHECK WERE ADDEDBECAUSE ASCII DOES NOT HAVE A SINGLE CHARACTER FOR <= OR >=if (CH=,<,) GetCh();if(CH=,=,) SYM=LEQ; GetCh(); else if(CH=,>,) SYM=NEQ; GetCh(); else SYM=LSS;)elseif (CH=A) GetCh();if (CH='=') SYM=GEQ; GetCh(); else SYM=GTR;)3 .增加条件语句的ELSE子句1)语法图2)修改 STATEMENT ()方法case IFSYM:GetSymQ;CONDITION(SymSetUnion(SymSetNew(THENSYM,DOSYM),FSYS),LEV,TX);if (Sym=THENSYM) GetSym();else Error(16);CXl=CX; GEN(JPC9O9O);STATEMENT(SymSetUnion(SymSetNew(ELSESYM), FSYS), LEV9 TX); if(SYM != ELSESYM)CODECX1.A=CX;elseGetSym();CX2 = CX;GEN(JMP, 0

    注意事项

    本文(编译原理实验报告-- PL-0编译程序的修改.docx)为本站会员(lao****ou)主动上传,第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知第一文库网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 001doc.com网站版权所有   

    经营许可证编号:宁ICP备2022001085号

    本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



    收起
    展开