语法、语义分析实验报告详解.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
河海大学物联网工程学院 编译原理课程实践 学年学期 2015-2016第二学期 实验名称 语法分析、语义分析 作 者 1362810225 刘云瞻 组 员 刘云瞻 华路 授课班号 6282506 专 业 计算机科学与技术13级 指导教师 金永霞 2016年6月 目录 1.引言 - 2 - 1.1 实验目的 - 2 - 1.2 实践内容 - 3 - 2. 算法设计 - 3 - 2.1 语法分析 - 4 - 2.1.1 生成(非)终结符表 - 4 - 2.1.2 构造FirstVT集和LastVT集 - 4 - 2.1.4 算符优先分析 - 7 - 2.2 语义分析 - 10 - 2.2.1 算术表达式和简单赋值语句的翻译 - 10 - 3. 运行结果与测试 - 11 - 3.1 运行结果 - 11 - 3.2 错误测试 - 13 - 4. 心得体会 - 14 - 1.引言 1.1 实验目的 通过使用高级语言实现部分算法加强对编译技术和理论的理解。设计的题目要求具有一定的规模,应涵盖本课程内容和实际应用相关的主要技术。 1.2 实践内容 本实验通过“算符优先分析法”来解决实验任务中的“语法分析”与“语义分析”这两个任务点。其中,“语法分析”是根据输入串和根据文法规则得出的优先关系表,完成一系列移进、归约的过程,“语义分析”在本实验中是通过对归约串进行的解释以及中间代码的生成。 具体来说,这里我通过Java 编程语言完成整个实验的设计,根据文法规则求得FirstVT集和LastVT集,然后生成算符优先关系表,最终实现算符优先分析总控程序,输出识别过程及结论;此处,在归约时候根据赋值语句的语法致导定义,为输入的赋值语句生成四元式序列。 2. 算法设计 本实验的算法设计主要分为“语法分析”和“语义分析”两部分。其中,“语 法分析”由生成(非)终结符表、构造FirstVT集和LastVT集、生成算符优先关系表和算符优先分析四个部分组成;“语义分析”是对实现“算术表达式和简单赋值语句的翻译”,找到归约采用文法、输出赋值过程及四元式序列。 这里,我使用的文法规则为: A-#S# S-d=E E-E+T E-T T-T*F T-F F--P F-P P-(E) P-i 输入串为:d=i+i*i# 赋值 i=6 2.1 语法分析 2.1.1 生成(非)终结符表 根据算符文法的定义简单判断文法是否合法,具体通过BaseUtil.isLegal(grammars)来实现,主要是不存在两个连续相继的非终结符。 终结符:文法规则的左部 非终结符:文法规则的右部中除了终结符以外都是非终结符 2.1.2 构造FirstVT集和LastVT集 求这两个集合主要是根据定义来求得,定义形式为: FirstVT: 1产生式P-a…或者P-Qa…,则a属于FirstVT(P) 2产生式P-Q…,则FirstVT(Q)属于FirstVT(P) LastVT: 1产生式P-…a或者P-…aQ,则a属于FirstVT(P) 2产生式P-…Q,则LastVT(Q)属于LastVT(P) 2.1.3 生成算符优先关系表 public static char[] getFirstVt(String[] wfs, char[] vt, char C) { String firstVtStr = ; for (int i = 0; i wfs.length; i++) { if (C == wfs[i].charAt(0)) { char[] c = wfs[i].toCharArray(); int j = 3;// A-... 0 1 2 下标从3开始 // A-a... if (isVt(c[j], vt)) { firstVtStr += c[j]; } else { // A-B... if (c.length == 4) { firstVtStr += String.valueOf(getFirstVt(wfs, vt, c[j]));// 求该非终结符的头符 } else {// A-Ba... firstVtStr += c[j + 1]; } } } } return removeRepeat(firstVtStr);

文档评论(0)

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

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

1亿VIP精品文档

相关文档