版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1、 完成内容1、增加单词:保留字 ELSE,FOR,STEP,UNTIL,RETURN 运算符 *=,/=,&,|,!2、修改单词:不等号# 改为 < >3、增加条件语句的ELSE子句2、 设计思路1、扩充单词 (1) 修改变量定义 1) 关键字个数增加5个const NORW = 14+5; 2) 符号表修改typedef enum NUL, IDENT, NUMBER, PLUS, MINUS, TIMES, SLASH, ODDSYM, EQL, NEQ, LSS, LEQ, GTR, GEQ, LPAREN, RPAREN, COMMA, SEMICOLON, P
2、ERIOD, BECOMES, BEGINSYM, ENDSYM, IFSYM, THENSYM, WHILESYM, WRITESYM, READSYM, DOSYM, CALLSYM, CONSTSYM, VARSYM, PROCSYM, PROGSYM, ELSESYM , FORSYM,STEPSYM,UNTILSYM,RETURNSYM,TIMESBECOMES,SLASHBECOMES, PLUSPLUS,MINUSMINUS, AND, OR, NOT SYMBOL;char *SYMOUT = "NUL", "IDENT", "
3、NUMBER", "PLUS", "MINUS", "TIMES","SLASH", "ODDSYM", "EQL", "NEQ", "LSS", "LEQ", "GTR", "GEQ","LPAREN", "RPAREN", "COMMA", "SEMICOLON", "PER
4、IOD","BECOMES", "BEGINSYM", "ENDSYM", "IFSYM", "THENSYM", "WHILESYM", "WRITESYM", "READSYM", "DOSYM", "CALLSYM","CONSTSYM", "VARSYM", "PROCSYM", "PROGSYM",
5、 "ELSESYM","FORSYM","TOSYM","DOWNTOSYM","RETURNSYM" ,"TIMESBECOMES","SLASHBECOMES", "PLUSPLUS", "MINUSMINUS", "AND", "OR", "NOT"3) 修改关键字表strcpy(KWORD 1,"BEGIN"); strcpy(K
6、WORD 2,"CALL"); strcpy(KWORD 3,"CONST"); strcpy(KWORD 4,"DO"); strcpy(KWORD 5,"ELSE");strcpy(KWORD 6,"END");strcpy(KWORD 7,"FOR");strcpy(KWORD 8,"IF"); strcpy(KWORD9,"ODD"); strcpy(KWORD10,"PROCEDURE"); strcpy(
7、KWORD11,"PROGRAM"); strcpy(KWORD12,"READ"); strcpy(KWORD13,"RETURN"); strcpy(KWORD14,"STEP"); strcpy(KWORD15,"THEN"); strcpy(KWORD16,"UNTIL"); strcpy(KWORD17,"VAR");strcpy(KWORD18,"WHILE");strcpy(KWORD19,"WRITE"
8、;); 4) 修改关键字的机内表示WSYM 1=BEGINSYM; WSYM 2=CALLSYM; WSYM 3=CONSTSYM; WSYM 4=DOSYM; WSYM 5=ELSESYM;WSYM 6=ENDSYM;WSYM 7=FORSYM;WSYM 8=IFSYM; WSYM9=ODDSYM; WSYM10=PROCSYM; WSYM11=PROGSYM; WSYM12=READSYM; WSYM13=RETURNSYM; WSYM14=STEPSYM; WSYM15=THENSYM; WSYM16=UNTILSYM; WSYM17=VARSYM;WSYM18=WHILESYM;WSY
9、M19=WRITESYM;5) 修改单字符表 SSYM'+'=PLUS; SSYM'-'=MINUS; SSYM'*'=TIMES; SSYM'/'=SLASH; SSYM'('=LPAREN; SSYM')'=RPAREN; SSYM'='=EQL; SSYM','=COMMA; SSYM'.'=PERIOD;SSYM''=SEMICOLON;SSYM'&'=AND;SSYM'|'=OR;SSY
10、M'!'=NOT;/删除SSYM'#'=NEQ; (2) 修改GetSym方法.else if (CH='<') GetCh(); if (CH='=') SYM=LEQ; GetCh(); else if(CH='>')SYM=NEQ;GetCh(); / 识别不等号< > else SYM=LSS; else if(CH='*') GetCh(); if(CH='=')SYM=TIMESBECOMES;Form1->printfs("- *
11、= -");GetCh();/ 识别 *= else SYM=TIMES; else if(CH='/') GetCh(); if(CH='=')SYM=SLASHBECOMES;Form1->printfs("- /= -");GetCh();/识别 /= else SYM=SLASH; else if(CH='+') GetCh(); if(CH='+') SYM=PLUSPLUS;Form1->printfs("- + -"); GetCh();/识别 + els
12、e SYM=PLUS; else if(CH='-') GetCh(); if(CH='-') SYM=MINUSMINUS;Form1->printfs("- - - -"); GetCh();/识别 - - else SYM=MINUS; else if(CH='&')/识别 & GetCh(); SYM=AND; Form1->printfs("- & -");GetCh(); else if(CH='|')/识别 | GetCh(); SYM=OR
13、; Form1->printfs("- | -");GetCh(); else if(CH='!')/识别 ! GetCh(); SYM=NOT; Form1->printfs("- ! -");GetCh(); (3) 修改statement方法switch(SYM)case FORSYM: Form1->printfs("-FOR-"); GetSym(); break; case STEPSYM: Form1->printfs("-STEP-"); GetSym();
14、break; case UNTILSYM: Form1->printfs("-UNTIL-"); GetSym(); break; case RETURNSYM: Form1->printfs("-RETURN-"); GetSym(); break;2、 增加else子句 (1) 语法描述图 (2) 递归下降子程序 statement()if(SYM=IFSYM)GetSym(); condition();if(SYM=THENSYM) GetSym();else Error();statement();if(SYM=ELSESYM)Get
15、Sym();statement(); (3) 举例设计的pcode代码if(a>b)then write(a);else write(b);其pcode代码如下:1) LOD 0 3 /a2) LOD 0 4 /b3) OPR 0 124) JPC 0 9)5) LOD 0 36) OPR 0 147) OPR 0 158) JMP 0 12)9) LOD 0 410) OPR 0 1411) OPR 0 1512) (4) 在递归下降子程序上加入语句动作 case IFSYM:GetSym();CONDITION(SymSetUnion(SymSetNew(THENSYM,DOSYM)
16、,FSYS),LEV,TX);if (SYM=THENSYM) GetSym();else Error(16);CX1=CX; GEN(JPC,0,0);STATEMENT(SymSetUnion(SymSetNew(ELSESYM),FSYS),LEV,TX);if(SYM=ELSESYM) GetSym(); CODECX1.A=CX; CX2=CX; GEN(JMP,0,0); STATEMENT(FSYS,LEV,TX); CODECX2.A=CX;else CODECX1.A=CX;break;3、 运行测试1、 扩充单词测试关键字用例:(TEST.PL0)PROGRAM EX01;VAR A;BEGIN FOR; UNTIL; STEP; RETURN; WRITE(A);END.运行结果截图: 测试运算符用例:(E02.PL0) PROGRAM EX02; BEGIN *=; /=; & |; !; END. 运算结果截图:2、增加ELSE子句测试ELSE子句、不等号<>用例:(E01.PL0)PROGRAM EX0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 13465.1-2024不透性石墨材料试验方法第1部分:总则
- 废旧家电回收利用行业营销策略方案
- 离心碾磨机细分市场深度研究报告
- 人力资源流程再造行业市场调研分析报告
- 相框边条项目运营指导方案
- 乐器销售行业营销策略方案
- 数据管理用计算机产品供应链分析
- 纺织品制壁挂细分市场深度研究报告
- 书法培训行业相关项目经营管理报告
- 茶壶项目运营指导方案
- 绵阳市高中2022级(2025届)高三第一次诊断性考试(一诊)化学试卷(含标准答案)
- 北京联合大学《影视作品欣赏》2023-2024学年第一学期期末试卷
- 《心理健康教育主题班会》主题
- 8 冀中的地道战(教学设计)2023-2024学年统编版语文五年级上册
- 疲劳试验机市场需求与消费特点分析
- 2024中国石化校园招聘3500人高频500题难、易错点模拟试题附带答案详解
- 2024年人教版七年级上册英语期中综合检测试卷及答案 (一)
- 组织管理体系-
- 山西省太原市2022-2023学年八年级上学期期中历史试题(解析版)
- 园艺用品采购合同范本
- 路基土石方数量计算表
评论
0/150
提交评论