实验二LL(1)预测分析.docxVIP

  • 18
  • 0
  • 约1.37万字
  • 约 20页
  • 2020-11-12 发布于天津
  • 举报
实验二LL(1)分析的设计与实现 开课实验室: A201 , A207 实验项目 LL(1)分析的设计与实现 实验类型 设计 实验学时 4 〈〈编译原理》实验指导 14非师 、实验目的 根据某一文法编制调试 LL(1)分析程序,以便对任意输入的符号串进行分析。掌握 LL(1) 分析法的基本原理,LL(1)分析表的构造方法,LL(1)驱动程序的构造方法。 二、 设备与环境 硬件设备:PC机一台 软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境, 如C \C++\Java等编程语言环境。 三、 实验要求 输入文法G的非终结符、终结符和产生式; 输出非终结符的FIRST集; 输出非终结符的 FOLLOW 集; 构造文法G的预测分析表; 对输入符号串进行分析。 2、 编程语言不限。 四、 实验原理 1,程序功能(流程图参考): 第1页共24页 2.计算FIRST集合: First集合最终是对产生式右部的字符串而言的,但其关键是求出非终结符的 First集合,由 于终结符的First集合就是它自己,所以求出非终结符的 First集合后,就可很直观地得到每个 字符串的First集合。 直接收取:对形如 U — a…的产生式(其中 a是终结符),把a收入到First(U)中 反复传送:对形入 U — P…的产生式(其中 P是非终结符),应把First(P)中的全部内容 传送到First(U)中。 算法描述:见教材 P80 )若 X € Vt,则 FIRST(X)={X}; )若 X € Vn,且有产生式 X-a ??…,a€ Vt,贝U a£ FIRST(X); )若 X £ Vn,X- ,则 £ FIRST(X) )若 X,Y1,Y2,Y3,Y4 Yn 都 £ Vn,而产生式 X-Y1,Y2 ??…Yn.当 Y1,Y2,Y3,Y4 Yn 者6能= ,那么 FIRST(X)=并集的 FIRST(Yi)-{ }(0=i=n) )若 Yi= (i=1,2,3 ??…),则 FIRST(X)=并集的 FIRST(Yi)-{ }并上{ } 计算FOLLOW 集合: Follow集合是针对非终结符而言的, Follow(U)所表达的是句型中非终结符 U所有可能的后随 终结符号的集合,特别地,“#”是识别符号的后随符。 直接收取:注意产生式右部的每一个形如 “???Ua…”的组合,把a直接收入到Follow(U) 中; 直接收取:对形如… UP???”(P是非终结符)的组合,把First(P)直接收入到Follow(U) 中; 直接收取:若为文法开始符号 S,则把#收入FOLLOW(S); 反复传送:对形如U 一…?的产生式(其中P是非终结符),应把Follow(U)中的全部内 容传送到Follow(P)中。 算法描述:见教材 P82 )若为文法开始符号 S,贝U FOLLOW(S)={#} )若为文法 A-aBb是一个产生式,则把 FIRST ( b)的非空元素加入 FOLLOW(B) 中。如果b-@则把FOLLOW(A)也加入FOLLOW(B)中。 构造预测分析表: 对于文法的每条产生式 A ,若a FIRST(),贝U M[A, a] = A 若 FIRST( ), b FOLLOW()则 M[A, b] = A ; 分析表M的其他元素均为出错标志 error。 预测分析程序流图:见课本P93-P94 五、程序源码 #include stdio.h #include stdlib.h” #define MaxRuleNum 8 #define MaxVnNum 5 #define MaxVtNum 5 #define MaxStackDepth 20 #define MaxPLength 20 #define MaxStLength 50 struct pRNode /*产生式右部结构 */ { int rCursor; struct pRNode *next; }; struct pNode { int lCursor; int rLength; /* 右部长度 */ struct pRNode *rHead; /* 右部结点头指针 */ }; char Vn[MaxVnNum + 1]; /* 非终结符集 */ int vnNum; char Vt[MaxVtNum + 1]; /* 终结符集 */ int vtNum; struct pNode P[MaxRuleNum]; int PNum; char buffer[MaxPLength + 1]; char ch; char st[MaxStLength]; /* 要分析的符号串 */ struct collectNode { int nVt;

文档评论(0)

1亿VIP精品文档

相关文档