编译技术课程LL1文法分析器.doc_第1页
编译技术课程LL1文法分析器.doc_第2页
编译技术课程LL1文法分析器.doc_第3页
编译技术课程LL1文法分析器.doc_第4页
编译技术课程LL1文法分析器.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验 三 LL(1)文法预测分析模拟实验目的:编写程序完成一个LL(1)文法的预测分析过程实验内容: 1. 给定一个文法,如教材P94ETEE+TE| TFTT*FT|Fi|(E)2. 构造预测分析表,将教材P95的表5.3存储与二维数组中3. 设置分析栈,编写程序实现P95的表5.4的分析过程#include#include#include#define LINE 5 #define ROW 8char AnalStack20; /分析栈 char SpareStack20; /剩余栈 char TerSymbol20 = i, +, -, *, /, (, ), # ;/终结符 char NTerSymbol20 = E,D,T,B,F; /非终结符 int j = 0, b = 0,l = 0 ,top = 0; typedef struct LLType char nonchar; /非终结符 char production5; /产生式 int length; /产生式长度 LL1Type; LL1Type e, d, d1 , t, c, c1 , f, f1;LL1Type PreTableLINEROW; void print() int a; for (a = 0; a = top + 1; +a) printf(%c, AnalStacka); printf(tt); void print1() int j; for(j = 0; j b; +j) printf( ); for (j = b; j l; +j) printf(%c, SpareStackj); printf(ttt); int main() int m, n, k = 1, flag = 0, finish = 0; char ch, x; LL1Type str;e.nonchar = E; strcpy(duction, TD); /ETE e.length = 2; d.nonchar = D; strcpy(duction, +TD);/E+TE d.length = 3; /d1.nonchar = D; /strcpy(duction, -TD);/D-TD /d1.length = 3; d1.nonchar = D; strcpy(duction, .); /E d1.length = 1; t.nonchar = T; strcpy(duction, FB);/TFTt.length = 2; c.nonchar = B; strcpy(duction, *FB);/B*FT c.length = 3; /c1.nonchar = B; /strcpy(duction, /FB);/B/FB /c1.length = 3;c1.nonchar = B; strcpy(duction, .);/T c1.length = 1; f.nonchar = F; strcpy(duction, (E);/F(E) f.length = 3; f1.nonchar = F; strcpy(duction, i);/Fif1.length = 1; for (m = 0; m LINE; m+)/初始化预测分析表 for (n = 0; n ROW; n+) PreTablemn.nonchar = N; /填充预测分析表 PreTable00 = e; PreTable05 = e; PreTable11 = d; /PreTable12 = d1; PreTable16 = d1; PreTable17 = d1; PreTable20 = t; PreTable25 = t; PreTable31 = c1; PreTable32 = c1; PreTable33 = c; /PreTable34 = c1; PreTable36 = c1; PreTable37 = c1; PreTable40 = f1; PreTable45 = f; printf(Please Enter A String to analyze:); do /读入分析串,放入剩余栈中 scanf(%c, &ch); if (ch!=i & ch!=+ & ch!=- & ch!=* & ch!=/ & ch!=( & ch!=) & ch!=#) printf(Input characters are illegal!n); exit(1); SpareStackj = ch; j+; while (ch!=#); l = j;/分析串长度 ch = SpareStack0;/当前分析字符 AnalStacktop= #; AnalStack+top = E;/#,E进栈 printf(nSteptAnalysis stacktRemaining stringtProductionn); do x = AnalStacktop-; /为当前栈顶字符printf(%dt, k+); for (j = 0; j ROW; j+) /判断是否为终结符 if (x = TerSymbolj) flag = 1; break; if (flag = 1) /如果是终结符 if (x = #) print(); print1(); finish = 1; /结束标记 printf(Accept!n); getchar(); exit(1); if (x = ch) print(); print1(); printf(%c matchingn, ch); ch = SpareStack+b; /下一个输入字符 flag = 0; /恢复标记 else/出错处理 print(); print1(); printf(%c Error!n, ch);/输出出错终结符 exit(1); else/非终结符处理 for (j = 0; j LINE; j+) if (x = NTerSymbolj) m = j; break; for (j = 0; j , str.nonchar);/输出产生式左边字符 for (j = 0; j = 0; j-)/产生式逆序入栈 AnalStack+top = ductio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论