编译原理实验.doc.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文档。上传文档
查看更多
编译原理实验.doc

华北科技学院计算机学院综合性实验 实 验 报 告 课程名称 编译原理 实验学期 2015 至 2016 学年 第 二 学期 学生所在院部 计算机学院 年级 2013 专业班级 计科B 学生姓名 学号 201307014 任课教师 王养廷 实验成绩 计算机学院制 开课实验室:软件开发实验室 procedure constdeclaration; begin if sym = ident then// 常量声明过程开始遇到的第一个符号必然应为标识符 begin getsym; if sym in [eql, becomes] then//如果是等号或赋值号 begin if sym = becomes//如果是赋值号(常量生明中应该是等号) then error(1); getsym;// 获取下一个token, 等号或赋值号后应接上数字 if sym = number then//如果的确是数字 begin enter(constant);// 把这个常量登陆到符号表 getsym//获取下一个token,为后面作准备 end else error(2)// 如果等号后接的不是数字,抛出2号错误 end else error(3)// 如果常量标识符后接的不是等号或赋值号,抛出3号错误 end else error(4)// 如果常量声明过程遇到的第一个符号不为标识符,抛出4号错误 end {constdeclaration}; (* 变量声明过程vardeclaration *) procedure vardeclaration; begin if sym = ident then// 变量声明过程vardeclaration begin enter(varible); 将标识符登陆到符号表中// getsym end else error(4)// 如果变量声明过程遇到的第一个符号不是标识符,抛出4号错误 end {vardeclaration}; (二)过程说明 说明入口参数,返回值和过程的功能 1、入口参数: 过程体入口时的处理 code[table[tx0].adr].a:=cx;(cx为过程入口地址,填写在code中)   with table[tx0] do?    begin?     adr:=cx; (过程的入口填写在table表的过程名中)     size:=dx; (过程需要的空间填写在table中)    end;   cxo:=cx; (保留过程在code中的入口地址在输出目标代码时用)?   gen(int,0,dx);(生成过程入口指令) 2、返回值: (* 通过静态链求出数据区基地址的函数base *) (* 参数说明:l:要求的数据区所在层与当前层的层差 *) (* 返回值:要求的数据区基址 *) function base(l: integer): integer; var b1: integer; begin b1 := b; (* find base 1 level down *) (* 首先从当前层开始 *) while l 0 do (* 如果l大于0,循环通过静态链往前找需要的数据区基址 *) begin b1 := s[b1]; (* 用当前层数据区基址中的内容(正好是静态链SL数据,为上一层的基址)的作为新的当前层,即向上找了一层 *) l := l - 1 (* 向上了一层,l减一 *) end; base := b1 (* 把找到的要求的数据区基址返回 *) end(* base *); (三)程序静态结构图 (四)PL0文法描述 在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法。文法的描述多用BNF(巴克斯范式),而另一个重要的概念:正则表达式,也

文档评论(0)

wnqwwy20 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档