网站大量收购闲置独家精品文档,联系QQ:2885784924

PL0课程设计多种思路.doc

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1. 增加一维数组类型(可增加指令) 增加一维数组后的声明语句语法描述图: EBNF语法描述:声明语句::=var标识符[‘[‘number’]’]{,标识符[‘[‘number’]’]} 识别数组部分代码实现,在getsym和enter里改动 if(ch==[)//如果是‘[’则认为是数组 { getchdo; getsymdo; sum=num;//把getsym取出的数字赋给sum,作为数组的维数 if(ch==])//维数后的应该是‘]’ { getchdo; sym=arrayp; } else { error(33);//如果没有‘]’报错 } if(sum1) error(34);//数组维数不能为0 } //-----------把一维数组当作变量,把数组填入名字表table里,在enter-------------------- switch(k) { case array: //数组时 table[(*ptx)-1].size=sum;//为数组变量开辟一个长度sum的空间 for(i=0;isum;i++) { table[(*ptx)].level=lev; //填入层次 table[(*ptx)].adr=(*pdx); //填入地址 strcpy(table[(*ptx)].name,#); //用#做为该数组的名字 table[(*ptx)].kind=variable; //类型为变量 (*ptx)++; (*pdx)++; } sum=0; //清空sum (*ptx)--; break; } 增加数组后赋值语句语法描述图: if(sym==varsym)/*收到变量声名符号,开始处理变量声名*/ { getsymdo; do{ vardeclarationdo(tx,lev,dx); if(sym==arrayp)//// { enter(array,tx,lev,dx); getsymdo; }//// while(sym==comma) { getsymdo;// vardeclarationdo(tx,lev,dx); if(sym==arrayp) //// { enter(array,tx,lev,dx); getsymdo; }//// } if(sym==semicolon) { getsymdo;// } else { error(5); } }while(sym==ident); } 数组单元在名字表中的位置: 因为把数组当成一种特殊的变量,所以也可以当做因子使用,不用做任何修改。 当使用数组中的单元时候,找到单元在名字表位置时调用position。 代码实现:在position里改动 int position(char * idt,int tx) { if(ch==[) getsymdo;//如果取到的符号为‘]’则认为是数组 if(sym==arrayp)//判断

文档评论(0)

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

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

1亿VIP精品文档

相关文档