- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
精品资料
精品资料
可编辑修改
可编辑修改
实验 7-8 预测分析表方法
一、实验目的 理解预测分析表方法的实现原理。
二、实验内容: 编写一通用的预测法分析程序,要求有一定的错误处理能力,出错后能够使程序继续运 行下去,直到分析过程结束。可通过不同的文法(通过数据表现)进行测试。
三.实验要求 : 给定算术表达式文法,编写程序,测试数据。 算术表达式文法
E — TE
E — +TE卜TE |
T—FT
T — *FT |/ FT |%FT |
F—(E) |id|num
四.实验过程:
1.实验代码:
Stringstaticstaticint
String
static
static
int
import java.io.*;
import javax.swing.JOptionPane; public class predict {
int length_vn=5,length_vt=10;
static int i,j,i1=0,e_flag=0; public predict() {} static
VN[]={E,e,T,t,F};
String
VT[]={+,-,*,/,%,(,),d,n,#
static String
CS[]={Te,+Te,-Te,$,Ft,*Ft,/F t,%Ft,,(E),d,n};
String
follow[][]={{#,)},{#,)},{#,),+,-} ,{#,),+,-},{#,),+,-,*,/,%} };
static analysis_table[][]={{-1,-1,-1,-1,-1,0,-1,
0,0,-1},{1,2,-1,-1,-1,-1,3,-1,-1,3},{-1,-1
,-1,-1,-1,4,-1,4,4,-1},{8,8,5,6,7,-1,8,-1, -1,8},{-1,-1,-1,-1,-1,9,-1,10,11,-1}};
public void locate(String vn,String vt){
for(int a=0;a5;a++){ if(VN[a].equals(vn)){ i=a;break;
} else i=-1;
}
for(int b=0;b10;b++){ if(VT[b].equals(vt)){ j=b;break;
}
else j=-1;
}
}
public void equal(int vn,int vt){
String cs=;
if(analysis_table[vn][vt]==-1) { int a;
for(a=0;afollow[vn].length;a++)
{
if(follow[vn][a].equals(VT[vt]))break
J
}
if(afollow[vn].length)error1();
else error2(vt);
}
else {
cs=CS[analysis_table[vn][vt]];
int cs_length=cs.length();
char achar[]=new
char[cs_length];
char bchar[]=new
char[cs_length];
cs.getChars(0,cs_length,achar,0);
for(int a=0,b=cs_length-1;acs_length;a++,b- -){
bchar[b]=achar[a];
}
String newstr=new
String(bchar);
in_Stack(newstr);
}
}
public void error1(){
System.out.println( 出 错 , 弹出栈顶符号 );
}
public void error2(int vt){
System.out.println( 出错, 跳过 +VT[vt]);
in_Stack(VN[i]);
i1++;
} public
void error3(String
str){
System.out.println(
错误
不匹配终结符
+str);
i1++;
}
public void in_Stack(String str){
try{
FileWriter fw = new FileWriter(test.txt, true);
PrintWriter pw=new PrintWriter(fw);
pw.write(str);
pw.close();
fw.close();
}catch(IOException ef){}
}
public String out_Stack(){
String c=;
try{
Reader du=new FileReader(tes
原创力文档


文档评论(0)