PL0编译原理实践.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实验报告 上机实验检查(总计70分): (1)分离解释和编译器(20分): 将解释器从已有代码中分离出来,形成一个独立的解释器,对于中间代码文件,可以执行并输出相应的结果。 (2)注释处理(10): 增加对注释的支持,注释由 (* 和 *)包含,不允许嵌套。 (3)布尔数据处理(10分): 增加对于布尔类型的支持,其产生式见《编译原理实践教程》。 (4)布尔表达式的短路处理(10分): 在上面工作的基础上,对 and 和 or 采取短路计算。 (5)for 语句处理(20分):   参照C语言,增加对于 for 语句处理。 完成情况(15分): 修改后的PL/0词法(正规式) 下面是本设计用到的正规式,bool类型的常量与变量都是通过保留字来体现的,number只是用于识别整型变量与常量。 空白 w-’ ’; //空格 n-\n; //回车 t-Tab; //制表 blank - (w | n | t)+; 保留字 begin -begin; //保留字 end - end; if - if; then - then; while - while; do - do; call-call; const - const; var - var; procedure - procedure; boolean -boolean; bool -true|false;//布尔常量 数字以及ID digit - 0|1|2|3|4|5|6|7|8|9; number - digit(digit)*; letter - a-zA-Z; id - letter (digit|letter)*; 特殊符号 becomes-:=; leq- ‘=’; les - ’’; req- ‘=’; res - ‘’; relation - = | = | = | | ;//关系运算符 plus - ‘+’; minus- ‘-’; times - ‘*’; slash - ‘/’; odd - ‘odd’; equ -’=’; lparen -’(’; rparen - ‘)’; comma - ‘,’; semicolon - ‘;’; period - ‘.’; and - ‘’; or - ‘|’; not - ‘!’; 修改后的PL/0语法(产生式) 设计采用递归预测分析的方法进行语法分析。 P-B. //P代表Program,B代表block B-MS; //M代表申明, S代表语句序列 M - C|V|P|L|e //C代表常量申明,V代表变量申明,P代表程序体申明,L代表bool申明,e代表空 C - const C’ C’- id = number C’ | id = bool C’ | ; | ,C’ V -var V’ V’-idV’ |,V’|; P- procedure id ; B ; L - boolean L’ L’-idL’|, L’ |; 语句序列 S - S’;S | S’ 语句的产生式 S’- I | C| G|F|W //I代表赋值语句,C代表call语句 ,G代表begin语句,F代表if语句,W代表while语句 I -id := X //X代表表达式 C -call id G -begin S end F - if T then S’ //T代表条件 W - while T do S’ 条件 T - X | odd X| X relation X 表达式 X - + R| -R |R R- PR’; R’-+PR’ | -PR’ | |PR’ | e P-HP’ P’-*HP’ | /HP’| HP’ | e H-!H | C C-id | number | (X) 各任务的实现伪代码或者主要思想 任务一:注释 实现该任务,只需要在getsym()函数中添加一点功能即可。也就是在词法分析的部位,利用那种与跳过空白类似的技术。由于代码比较短,下面直接贴出,并给予解释。 if(ch == ( ) { stored = ch; getch(); if( ch == * ) { flag = 1; getch(); do { while( ch != * ) { getch(); } getch(); }while(ch != )); flag = 0; getch(

文档评论(0)

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

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

1亿VIP精品文档

相关文档