编译原理实验二zy探究.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文档。上传文档
查看更多
实验二 语法分析及语义处理实验 专业:13计算机一班 学号:20130610040109 姓名:赵宇 一、【实验目的】 加深对语法分析器工作过程的理解;能够采用一种编程语言实现简单的语义分析程序;能够使用自己编写的分析程序对简单的程序段进行语义分析,生成中间代码。 二、【实验内容】 掌握递归子程序(或过程)的设计方法。 掌握用递归子程序法设计语法分析的方法,从而加深对其他方法的理解。 掌握目标程序的运行方法,掌握各源程序语句的目标结构。 掌握以语法为主导的翻译方法。 用递归下降分析法编制语义分析程序。 三、【实验要求】 1. 对语法规则有明确的定义; 2. 编写的分析程序能够对输入算数表达式进行正确的语义分析; 3. 对于遇到的语法、语义错误,能够做出简单的错误处理,给出简单的错误提示,保证语义分析过程; 4. 实验报告要求用文法的形式对语义详细说明,说明语义分析程序的工作过程,说明相应翻译动作的实现。 四、【实验步骤】 1. 定义语法规则; 2. 设置语义过程,插入语义动作; 3. 对遇到的语法、语义错误做出错误处理。 五、【算法思想】 1、算术表达式的定义 算术表达式的文法: 〈无符号整数〉 ∷= 〈数字〉 { 〈数字〉 } 〈标识符〉 ∷= 〈字母〉 {〈字母〉 | 〈数字〉 } 〈表达式〉 ∷= 〈项〉 {〈加法运算符〉 〈项〉 } 〈项〉 ∷= 〈因子〉 {〈乘法运算符〉〈因子〉 } 〈因子〉 ∷= 〈标志符〉 | 〈无符号整数〉 〈加法运算符〉 ∷= +| - 〈乘法运算符〉 ∷= * | / 〈字母〉 ∷= a | b | … | z 〈数字〉 ∷= 0 | 1 | … | 9 2、构造出相应的文法 E-TE~ E~-+TE~ E~--TE~ E~- T-FT~ T~-*FT~ T~-\FT~ T~- F-(E) F-n F-z n 表示数字 z 表示字符 3、设置语义过程。 (1)emit(char *result,char *ag1,char *op,char *ag2) 该函数的功能是生成一个三地址语句送到四元式表中。 四元式表的结构如下: struct { char result[8]; char ag1[8]; char op[8]; char ag2[8]; }quad[20]; (2) char *newtemp() 该函数回送一个新的临时变量名,临时变量名产生的顺序为T1,T2,… char *newtemp(void) { char *p; char m[8]; p=(char *)malloc(8); k++; itoa(k,m,10); strcpy(p+1,m); p[0]=’t’; return(p); } 函数int lrparser() 在原来语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。在实验中我们只对表达式、赋值语句进行翻译。 函数void scaner() 扫描表达式进行词法分析 函数char *expression_r(void) 对加减法进行语义分析,调用term分析产生表达式计算的第一项eplace,调用term分析产生表达式计算的第二项ep2,调用newtemp产生临时变量tp存储计算结果,生成四元式送入四元式表。 函数char *term(void) 对乘除进行语义分析,调用factor()分析产生表达式计算的第一项eplace,调用factor分析产生表达式计算的第二项ep2,调用newtemp产生临时变量tp存储计算结果,生成四元式送入四元式表。 函数char *factor(void) 对于赋值语句进行语法分析,并返回对应表达式中三元式的地址。 六、【源程序代码】 #includestdio.h #includestring.h #includeiostream.h #includestdlib.h struct { char result[12]; char ag1[12]; char op[12]; char ag2[12]; }quad; char prog[80],token[12]; char ch; int syn,p,m=0,n,sum=0,kk; //p是缓冲区prog的指针,m是token的指针 char *rwtab[6]={begin,if,then,while,do,end}; void scaner(); char *factor(void); char *term(void); char *expression_r(void); int yucu(); v

文档评论(0)

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

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

1亿VIP精品文档

相关文档