编译原理 语法分析 实验报告.docxVIP

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理 语法分析 实验报告 编译原理lowbar;语法分析lowbar;实验报告 《编译原理及实践》结课大作业 学生姓名 艾力娜·托里干 所属学院 信息工程学院 专 业 计算机科学与技术 一.LL(1)预测语法分析器 简单的算术表达式的LL(1)语法分析器 Microsoft Visual C++ 6.0,使用C/C++语言实现代码编程。 需求分析与概要设计: 编译程序的语法分析器以单词符号作为输入,分析单词符号串是否形成符合语法规则的语法单位,如表达式、赋值、循环等,最后看是否构成一个符合要求的程序,按该语言使用的语法规则分析检查每条语句是否有正确的逻辑结构,程序是最终的一个语法单位。编译程序的语法规则可用上下文无关文法来刻画。 语法分析的方法分为两种:自上而下分析法和自下而上分析法。自上而下就是从文法的开始符号出发,向下推导,推出句子。而自下而上分析法采用的是移进归约法,基本思想是:用一个寄存符号的先进后出栈,把输入符号一个一个地移进栈里,当栈顶形成某个产生式的一个候选式时,即把栈顶的这一部分归约成该产生式的左邻符号。 详细的算法描述: (1) 自顶向下带递归语法分析 (这个方法用的是老师给的文法) 1、首先对所以的生成式消除左递归、提取公共左因子 2、在源程序里建立一个字符串数组,将所有的生成式都存在这个数组中。 3、给每个非终结符写一个带递归的匹配函数,其中起始符的函数写在main函数里。这些函数对生成式右边从左向右扫描,若是终结符直接进行匹配,匹配失败,则调用出错函数。如果是非终结符则调用相应的非终结符函数。 4、对输入的符号串进行扫描,从起始符的生成式开始。如果匹配成功某个非终结符生成式右边的首个终结符,则将这个生成式输出。匹配过程中,应该出现的非终结符没有出现,则出错处理。 ? 产生式 P : E - E+T T - T/F E - E-T T - F E - T F - (E) T - T*F F - i 提取左因子并消除左递归得 产生式 P : (0) E→Te (1) e→+Te (2) e→-Te (3) e→ε (4) T→Ft (5) t→*Ft (6) t→/Ft (7) t→ε (8)F→(E) (9) F→i /*表示id */ ? 开始符号S: E ? 终结符集Vt: { E, e, T, t, F } ? 非终结符集Vn: { +, -, *, /, (, ), i } [构造预测分析表] ? FIRST集: first(E)= first(T)= first(F)={ ﹝, i } first(e)={+, -, ε} first(t)={*, /, ε} ? FOLLOW集: follow(E)={$, ﹞} follow(e)=follow(E)={$, }} follow(T)={fitsr(e)- ε}+follow(e)={+, _ , ﹞, $} follow(t)=follow(T)+follow(t)={+, _ , ﹞, $} follow(F)={follow(t)- ε}+follow(T)+follow(t)={*, /, +, _ ,﹞, $} [预测分析器模型] 图1-1非递归的预测语法分析器模型 #include #include #include #define Vtn 8 #define Vnn 5 #define Pn 10 #define Pmaxlen 20 #define MaxStLength 50 #define MaxStackDepth 50 char Vn[Vnn]={E,e,T,t,F}; char Vt[Vtn]={i,+,-,*,/,(,),$}; char Pstr[Pn][Pmaxlen]={ E-Te, e-+Te, e--Te, e-ε, T-Ft, t-*Ft, t-/Ft, t-ε, F-(E), int Prlen[Pn]={2,3,3,1,2,3,3,1,3,1}; int Pint[Pn][3]={ {102,101}, {

文档评论(0)

软件开发 + 关注
官方认证
服务提供商

十余年的软件行业耕耘,可承接各类需求

认证主体深圳鼎云文化有限公司
IP属地湖南
统一社会信用代码/组织机构代码
91440300MA5G24KH9F

1亿VIP精品文档

相关文档