自顶向下的语法分析实验报告一.docVIP

  • 94
  • 0
  • 约2.06千字
  • 约 5页
  • 2017-09-02 发布于浙江
  • 举报
自顶向下的语法分析实验报告一

武汉轻工大学 编译原理实验报告 姓 名 朱春桃 院 (系) 数学与计算机学院 班 级 软件工程1203 学 号 1205110605 指导教师 李禹生 2014 年 11 月 10 日 一、实验目的 完成自顶向下语法分析算法的程序设计。 二、实验内容 设计、调试并测试自顶向下语法分析算法程序。 三、设计思路 根据课堂讲授的自顶向下语法分析方法,可以根据递归下降子程序方法设计语法分析程序,也可以根据LL(1)算法设计语法分析程序,针对文法: G[E] E→E+T | T T→T*F | F F→( E ) | i (1)由于文法G[E]不满足LL(1)文法条件,需要进行必要的等价文法变换。变换后的等价文法为: H[E] E→TA A→+TA | ε T→FB B→*FB | ε F→( E ) | i (2)等价文法H[E]不含左递归,可以证明文法H[E]满足LL(1)文法条件 (3)根据递归下降子程序方法设计语法分析程序 ①递归程序清单 ②调试过程说明 ③测试语句设计 ④测试结果列表 ⑤测试结论分析 (4)根据LL(1)算法设计语法分析程序 ①预测分析表 ②预测分析程序清单 ③调试过程说明 ④测试语句设计 ⑤测试结果列表 ⑥测试结论分析 程序清单 /* E-TA, A-+TA|ε, T-FB, B-*FB|ε, F-i|(E). */ #includestdio.h void E(char str[80],int i,int error); void A(char str[80],int i,int error); void T(char str[80],int i,int error); void B(char str[80],int i,int error); void F(char str[80],int i,int error); void main() { int i=0,j=0,error=0; char str[80]; printf(请输入字符串(#为结束字符):); while ((str[j]=getchar())!=#) j++; str[j]=#; E(str,i,error); if(error) printf(error\n); else printf(right\n); } void E(char str[80],int i,int error) { printf(E-TA\n); T(str,i,error); A(str,i,error); } void A(char str[80],int i,int error) { if(str[i]==+) { printf(A-+TA|ε\n); i++; T(str,i,error); A(str,i,error); } else if (str[i]==#||str[i]==)){} else error++; } void T(char str[80],int i,int error) { printf(T-FB\n); F(str,i,error); B(str,i,error); } void B(char str[80],int i,int error) { if (str[i]==*) { printf(B-*FB|ε\n); i++; F(str,i,error); B(str,i,error); } } void F(char str[80],int i,int error) { if (str[i]==() { printf(F-i|(E)\n); i++; E(str,i,error); if(str[i]==)) { i++; } else error++; } else { if(str[i]==i) { printf(F-i|(E)\n); i++; } else error++; } } 测试结果 实验总结 实验在老师提前给出的算法指导下,完成自顶向下语法分析的程序实际上是不困难的。但是老师的目的应该不在程序,而是让我们通过此次实验对课堂的理论知识有个深层次的理解。所以通过本次实验,我对自顶向下的语法分析过程有了更深的了解,结合课堂知识打下了学习其他语法分析方法的基础。

文档评论(0)

1亿VIP精品文档

相关文档