编译原理LL1文法分析器实验java.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理LL(1)文法分析器实验 本程序是基于已构建好的某一个语法的预测分析表来对用户的输入字符串进行分析,判断输入的字符串是否属于该文法的句子。 基本实现思想:接收用户输入的字符串(字符串以“#”表示结束)后,对用做分析栈的一维数组和存放分析表的二维数组进行初始化。然后取出分析栈的栈顶字符,判断是否为终结符,若为终结符则判断是否为“#”且与当前输入符号一样,若是则语法分析结束,输入的字符串为文法的一个句子,否则出错若不为“#”且与当前输入符号一样则将栈顶符号出栈,当前输入符号从输入字符串中除去,进入下一个字符的分析。若不为“#”且不与当前输入符号一样,则出错。 若栈顶符号为非终结符时,查看预测分析表,看栈顶符号和当前输入符号是否构成产生式,若产生式的右部为ε,则将栈顶符号出栈,取出栈顶符号进入下一个字符的分析。若不为ε,将产生式的右部逆序的入栈,取出栈顶符号进入下一步分析。 程序流程图: 本程序中使用以下文法作对用户输入的字符串进行分析: E→TE’ E’→+TE’|ε T→FT’ T’→*FT’|ε F→i|(E) 该文法的预测分析表为: 1、显示预测分析表,提示用户输入字符串 2、输入的字符串为正确的句子: 3、输入的字符串中包含了不属于终结符集的字符 4、输入的字符串不是该文法能推导出来的句子 程序代码: package ; import java.io.*; public class LL { String Vn[] = { E, E, T, T, F }; // 非终结符集 String Vt[] = { i, +, *, (, ), # }; // 终结符集 String P[][] = new String[5][6]; // 预测分析表 String fenxi[] ; // 分析栈 int count = 1; // 步骤 int count1 = 1;//’分析栈指针 int count2 = 0, count3 = 0;//预测分析表指针 String inputString = ; // 输入的字符串 boolean flag; public void setCount(int count, int count1, int count2, int count3){ this.count = count; this.count1 = count1; this.count2 = count2; this.count3 = count3; flag = false; } public void setFenxi() { // 初始化分析栈 fenxi = new String[20]; fenxi[0] = #; fenxi[1] = E; } public void setP() { // 初始化预测分析表 for (int i = 0; i 5; i++) { for (int j = 0; j 6; j++) { P[i][j] = error; } } P[0][0] = -TE; P[0][3] = -TE; P[1][1] = -+TE; P[1][4] = -ε; P[1][5] = -ε; P[2][0] = -FT; P[2][3] = -FT; P[3][1] = -ε; P[3][2] = -*FT; P[3][4] = -ε; P[3][5] = -ε; P[4][0] = -i; P[4][3] = -(E); // 打印出预测分析表 System.out.println( 已构建好的预测分析表); System.out.println(----------------------------------------------------------------------); for (int i=0; i6; i++) { System.out.print( +Vt[i]); } System.out.println(); System.out.println(----------------------------------------------------------------------); for (int i=0; i5; i++) { System.out.print( +Vn[i]+ ); for (int j=0; j6; j++) { int l = 0; if

文档评论(0)

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

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

1亿VIP精品文档

相关文档