实验-编译原理预测分析表方法试验报告_第1页
实验-编译原理预测分析表方法试验报告_第2页
免费预览已结束,剩余3页可下载查看

下载本文档

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

文档简介

1、精品资料 可编辑修改 实验 7-8 预测分析表方法 一、实验目的 理解预测分析表方法的实现原理。 二、实验内容: 编写一通用的预测法分析程序,要求有一定的错误处理能力,出错后能够使程序继续运 行下去,直到分析过程结束。可通过不同的文法(通过数据表现)进行测试。 三实验要求 : 给定算术表达式文法,编写程序,测试数据。 算术表达式文法 E TE E +TE卜TE | & TFT T *FT |/ FT |%FT | & F(E) |id|num 四实验过程: 1实验代码: import java.io.*; import javax.swing.JOptionPane; publ

2、ic 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,

3、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(VNa.equals(vn) i=a;break; else i=-1; for(int b=0;b10;b+) if(VTb.equals(vt) j=b;break; else j=-1; public void equal(int vn,int

4、 vt) String cs=; if(analysis_tablevnvt=-1) int a; for(a=0;afollowvn.length;a+)String static static int 精品资料 可编辑修改 if(followvna.equals(VTvt)break J if(afollowvn.length)error1(); else error2(vt); else cs=CSanalysis_tablevnvt; int cs_length=cs.length(); char achar=new charcs_length; char bchar=new char

5、cs_length; cs.getChars(0,cs_length,achar,0); for(int a=0,b=cs_length-1;acs_length;a+,b- -) bcharb=achara; String newstr=new String(bchar); in_Stack(newstr); public void error1() System.out.println( 出 错 , 弹出栈顶符号 ); public void error2(int vt) System.out.println( 出错, 跳过 +VTvt); in_Stack(VNi); i1+; publ

6、ic 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 d

7、u=new FileReader(test.txt); BufferedReader br = new BufferedReader(du); c=br.readLine(); br.close(); du.close(); File f1=new File(test.txt); f1.delete(); catch(IOException eio) c=c.trim(); String sub_str=c.substring(0,c.length()-1); in_Stack(sub_str); String zhand=c.substring(c.length()-1,c.lengt h(

8、); return zhand; public static void main(String args) File f=new File(test.txt); f.delete(); predict pd=new predict(); String fenxi; String input=JOptionPane.showInputDialog( 请输入算术表达式 :); input=input.trim(); char gchar=new char1;精品资料 可编辑修改 pd.in_Stack(#E); for(b=0;b10;b+) fen xi=E; while(i1 in put.l

9、e ngth() if(VTb.equals(vt)&an alysis_tabl int a,b,c; e ab!=-1) fen xi=pd.out_Stack(); System.out.pri nt(CSa nalysis_tabl System.out.println(” - _ ); eab+n );break; Syste m.out. print( 栈顶元 素: +fenxi+t); in put.getChars(i1,i1+1,gchar,0); if(c10&!fen xi.equals(vt) pd.error3(fe nxi); Stri ng vt=

10、new if(fen xi.equals(vt) Strin g(gchar); System.out.pri ntl n( vt=vt.trim(); 匹配终结符+fenxi+t); System.out.pri nt(” 当前单 i1+; 词记号:+vt+ t); for(c=0;c10;c+) else if(VTc.equals(fe nxi)break; for(a=0;a); 2 .试验测试: 给定一符合该文法的句子,如 d+n/d ,运行预测分析程序,给出分析过程和每一步的 分析结果,输出形式如下图: 精品资料 可编辑修改 花)Taks1Propurtiuis 吐料 Paia;

11、Source Explorer LJ Snippets Console : ternfiinated predict Uavii Application CAPrcjgrarn 具* H 轨 兰 義看兄隶: 牙話应词记寻辰拜融鬲二;二 福看悬打7 寸石董石薜底拜霏鬲扁二;2; - -M! - K -K - - K- -M! 桟顶亓蕎:d 当前单词记号:“ 四配辔结符 b rw IH -M! IH -T *M IM rT IM IM *M 1 rM rT 1 *M rW 栈顶元素;t 当前单词记言;+ 聂开非终结符A 視看蒜匚 呂击帚记喜:菸昇*s競二;:二 禹顶元;寸 m 兩直词记号;+ 匹配

12、聶结咅+ _ 義看急7 石S不髙驕二“蔭弄孑面扁二;2; 福看无事:7 tm 7 -MS IV tT -B -M! -B IT !T -M! -B - -: EH 桟顶亓毒;n 当前单词记号;” 匹配緡结笛n W -MS -M- -B! -M- *M! 栈顶亓素;U 当前单词记 m; f 聂幵非终结符U-/FL 栈顶元隶;/ 当前单词记号1 / 匹配浚结苻# 茯看蒜7 药真高萌丁 亘弄転忌扁二IT 菽顶元:d 词记号:匹配终結Xd 沽隶 ” I 给定一不符合该文法的句子,如dd*n ,运行预测分析程序,给出分析和每一步的分析 过程,并给出对错误的处理分析过程,输出形式如下图: 精品资料 可编辑修改 四、实验总结: 1 本次通过试验,我学会了预测分析表的构造方法,即给文法的正规式编号:存放在 字符数组中,从 0开始编号,正规式的编号即为该正规式在数组中对应的下标。 2 明白了错误处理机制,紧急方式的错误恢复方法(抛弃某些符号,继续向下分析) (1 )栈顶为非终结符 A,串中当前单词属于 FOLLOW (A),则从栈中弹出 A (此时 可认为输入串中缺少 A表示的结构),

温馨提示

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

评论

0/150

提交评论