编译原理实验报告_第1页
编译原理实验报告_第2页
编译原理实验报告_第3页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、编译原理实验报告13-3 班班级:计算机科学与技术学号:20xxxxx姓名:xx 完成日期:xxx日实验一词法分析设计一、功能描述:从原文件中读入字符对文件中的各类字符进行词法分析 统计行数和列数用于错误单词的定位 打印出分析后的结果如果发现错误则报告出错二、程序结构描述:数组k存储关键字 数组a存储运算符数组b存储关系运算符数组s存储分解符 动态数组id存放标识符动态数组ci存放常数pi nt指针strtoken存放构成单词符号的字符串row行数line列数char ch字符变量,存放最新读进的源程序字符GetChar()直到读入非空true,否则返回falsetrue,否则返回falsev

2、oid GetChar() 将下一字符读到ch中void GetBC检查ch中的字符是否为空,若是,则调用void Retract指针回调一个字符位置,ch置空bool sdigit(char c) 判断当前字符是否是数字,若是返回 bool isletter(char c) 判断当前字符是否字母,若是返回int Reserve(String s)判断s是否是保留字,若是返回编码,否则返回-1void snum()识别数字串int ss(char c) 判断字符c是否在分界符表中int sa(char x) 判断字符c是否在运算符表中int sb(char x) 判断字符c是否在关系运算符表中

3、void an alyze()输入串分析处理三、详细算法描述:菲劇kaihterlI驱卩,point卅(c.pointeO财底低叫首出单诩酥J.UW1)词裁井靳子樨序的简化框图四、测试结果else ifCssfch) else ifCsafc町 else ifCsbCch)else洱程序字符串:if I - 0 (hen n+;k <= 3b 知;outputf Gettharic static void moin WbrdAnoly q - new > cl analyzeO;单洞二元存列类型CZB (If.列)iftun(14)i(GJ)(1J)=他勻英至运知衬(13)Q(SF

4、0)(1,4)then(Ijhen)tlP5)nn)标识料(脚+aP+)(1J):(2,;)舟界哥(Ipa)a(6Pa)掠氓符(2J5< =(4P<=)(2P2)3bErrorError(2J)%ErrorError(2.4)(2J)好界符(2;S)1C2,;>(2.6)Servers 曰 Conwlt £31笃砧曰迴兰匚五、实验总结通过本次试验,更深层次的理解了词法分析器的作用以及实现过程,也对编 译原理这门课有了更深的认识。在程序实现的过程中,状态转换是重点,要详细 地考虑到每一种情况,我在开始的时候就因为会忽略了标识符与保留字的区别浪 费了时间。其次要注意运算

5、符+、-还有关系运算符 <=和>=的判断。最后要注意 各种出错情况处理。实验二LL(1)分析法一、LL(1)分析法的思想:当一个文法满足LL(1)条件时,我们就可以为它构造一个不带回溯的自上而 下的分析程序,这个分析程序是有一组递归过程组成的,每个过程对应文法的一个非终结符。实现LL(1)分析的一种有效的方法是使用一张分析表和一个栈进行 联合控制。预测分析表是一个MA,a形式的矩阵,存储着分析规则;栈 STACK用于存放文法符号。从栈顶取符号,按照分析表给出的规则进行有步骤的分析。 符合LL(1)分析法的文法:文法G的任意两个具有相同左部的产生式 A >a |满足下列条件:(

6、1) 文法不含左递归。(2) 如果a 供均不能推导出£,贝U FIRST(a ) A FIRST( B )=。(3) a和B至多有一个能推导出&(4) 如果 B * > 则 FIRST(a ) A FOLLOW(A)=将满足上述条件的文法称为LL(1)文法。二、程序结构描述:数组char vt存储终结符数组char vn存储非终结符数组boolean First存放文法的 First集数组 boolean Follow存放文法的 Follow 集数组 String Graphic构建文法的 LL(1)分析表int vnoc(char c)返回c在非终结符表中的位置int

7、 vt_loc(char c)返回c在终结符表中的位置void first()求文法的 first 集void follow()求文法的 follow 集void graphic()构建分析表void analyze()输入串分析处理三、详细算法描述:程序入取一»入符号筑丄取Tft人符号爼弹岀劇脐i号極从LL(4)预別分析程序壷程四、测试结果:tfCb = 'dA2. apper>d("£ij:ees 1 return;else>elseretutenp-Mk;public static voidString 呂; Scfluner reade

8、r s 丘reader,n«xt(LL1 a « new LL1C1知析快期余输人申JS用产生朮#Ei+i*i#初绪优rCTi+Pb*E->TGpor,pusH(cn*C$Fl+|*|r*T->F5W,PUSH(SF)3#-G5ii+rwF-»liTOP.PUSHdi)目#CS+i*i#GETNEXTCbSSC+i*i#S->iPOP&*GT+钊*WG->+TGPOP,PUSH(GT+)7ff-CTlBlfCETnEXTSISa*GSFi*i#T">FSiPOP.puSHtsn寸ffCSii*i#F->iiPO

9、P.PUSH(ii)10#GSr#GET1MEXTCI)11fCSF*5->5POP,PUSH(SF*|12rGSFCETNEXTg?n#CSIjifF->|ROPUSHd)14#C5GETNEXTO)IS#S->EPOP1£3f#G->ePOPsuccessr:i+i"i»mJJ Orrver.javaWordAr 猛人率:LLQ)分析馮!272273274275276277278279280281282283284285286287分析: 9 temp+;292d public10111213141516171819202122stat

10、ic 5 String s; Scanner rea s reoder LL1 a new 6 arwlyze(s:242526分析找剩余檢入氷所用产生式幼作初始化#CTE->TGPOP.PUSH(CT)心Fi+i*(i+i/i»T->FSPOP.PUSH(SF)#CSiF->iPOP.PUSH(i)#GSCETNEXT(I)#CPOP#CT*C->*TCPOP.PUSH(CT)#GTi*(i4.i/iXCETNEXT(I)心Fl*(i+i/iXT->FSPOP.PUSH(SF)心jF->lPOP.PUSH(i)#GSCETNEXT(I)心厂S&g

11、t;FSPOP.PUSH(SF«)心FCETNEXTO)#GS>E(i+i/i>#F-XBPOP.PUSHOEO#CS>ECETNEXT(I)心)CTE->TCPOP.PUSH(CT)WGSJGSFi+i/WT->FSPOP.PUSH(SF)心81 l/0rF >iPOP. PUSH 心心i/MCETNEXT(I)心)CS->£POP心)CT+C->*TCPOP.PUSH(CT+)心)CTi/i»CETNEXT(I)心)CSFi/WT->FSPOP.PUSH(SF)心)CSIl/WF->iPOP. PUS

12、H #GS)CS/"CETNEXT(I)心心F/i>#S->/FSPOP.PUSH(SF/)心心FMCETNEXT(I)#CS)CSiiXF->iPOP.PUSH(i)#CS)CS>#CETNEXT(I)#c$>cS->POP#cs>>#C->POP心#CETNEXT(I)#c*SxPOP#GxPOP28M success!口 hropcw 黑 Servers QLL1 Java Applicati<xij /System/Utxary131415161718-boolean First口 = new boolean5 10

13、; boolean FoUowOQ = new boolean5 10; String Graphic口 new St ring 5 8;LLl(StriLL(lWt析習20212223242526272829303ie32Corc.cintProperties分析:01014出捐啦!Tttr F .1 F .1F-F i 析 T s s s TTSSSSSSS ECCCCCCCCCGCCCC #I*窮余输人串i+i-ii#i*ii#i*ii#i*ii#ii#ii#ii#ii#所用产生式E->TG T->FS F->iS->E C->4TCT->F5 F-&

14、gt;iS->*FSF->i动作 初始化 POP.PUSH(CT) POP.PUSH(SF) POP.PUSH(i) CETNEXT(I) POP POP.PUSH(CT+) CETNEXT(I) POP.PUSH(SF) POP.PUSH(i) CETNEXT(I) POP,PUSH(SF*) CETNEXT(I) POP.PUSH(i) CETNEXT(I)五、实验总结:通过本次实验,我深入了解了词法分析器和LL(1)文法的预测分析法设的计和实现。LL(1)分析方法较难的地方是文法的First集和Follow集的求解。因为用到了大量的递归算法,而我对递归掌握的不是很透彻,因此花

15、费了许多时间。First集和Follow集求解成功后分析表的构造就相对轻松,用栈来存放文法符号,当栈顶符号遇到输入符号时要分好多 种情况,容易漏掉,出错情况也要考虑周全。实验三LR(1)分析法一、LR( 1)语法分析程序设计思想:(1) 总控程序,也可以称为驱动程序。对所有的 LR分析器总控程序都是相同的。(2) 分析表或分析函数,不同的文法分析表将不同,同一个文法采用的LR分析器 不同时,分析表将不同,分析表又可以分为动作表(ACTION )和状态转换(GOTO) 表两个部分,它们都可用二维数组表示。(3) 分析栈,包括文法符号栈和相应的状态栈,它们均是先进后出栈。分析器的动作就是由栈顶状态

16、和当前输入符号所决定。二、程序结构描述:数组char vt存储终结符 数组char vn存储非终结符boolean isvn(char c) 判断字符 c是否为非终结符 boolean isvt(char c) 判断字符 c是否为终结符 int ACTION。nt a,char b)状态栈顶元素遇到终结符的动作 int GOTO(i nt a,char b)状态栈顶元素遇到非终结符的动作void analyze(String s)输入串s分析处理三、详细的算法描述:U沖分别入衣态栈和杼号栈令保狀态挨機顶,&倉両楕向的特号把谕蚁分到犍入 符号栈和状态桟; 便郭甬进到下一亍 字符.Wnll

17、-reduce 型分别从栈顶弹出|U|个 符号冷宙是当nt挨顶 状态,把n和q/q!轧4】 先姑键人挨中转出产 主式A-AU.结出當处理四、测试结果:378ifCnAastElm&ntC)=咗竖 n.sizeQ = Z)(5ysteffl. out.print(,rAcc:功!");330break;3£11BZleielse ifCACTIONCj) 3)PfoperiirtSi 報 Servftfst-rrrriniitrd-* Lft L8910111213145 17 7 -7ijq rri净® 吕冯占Jb -Hw05的配01血&1也机&a

18、mp;101肌aial符号找剩余桃人串动作说朋#弱”枝态5人栈+i*i#约,GOTDCdF) = H人栈#F+i 讣E:T-bF规妁,GOTOC0,T) - 2人橈岸T+i*t«r2:ET规樹"MTOC0:n = 1AK#E+i*i#s6,状态6A栈LUs5Ftt态臥栈#E+i*t#r6:F->t规妁"GOTO(丽-1A«#E+FE:T-aF规妁,KJTDCg.T) 9A#E+T*i#s?ptt态7人栈#E+T*t#s5,U5A«#E+T*i»布:F-M规妁,GOT%hF) 10AE#E+T*FT:T-T隔妁,GOTOCCpT)

19、 -#E+TrXEoE+T規期 G0T0(ft,E)=认枝#E#Ah:好祈感功!:Pfflpenles 城J Servers COrlSOlf 腐Etm'iiha.Ud> LR1 Appli<Jitibn %lEerni/LibrArv/jAvA/JY-aViirlualMaehinit&/1.6.0.hJk/CahlfiUfHorTiei!b>ri/jjyji (20£蠢石Hl書日 ±I:2S.3QjY H13i+涉 10 1234567891234234567B91111 111 11122222005 03 BZ 01 016 01&

20、#163;S B163 0価01S16 01&4 01645 01G43 01642 016427 0164275 01642716 01642 ei64B 0164811 01甜 016901i 1- F T T T -1ft c c c c c c +*+*-+ 断酹#T#E#E#E*E#E*E#E#E#E*E*E昶#E#E粧#E#E#E粧TEE c c c F T + + + + +剧S:轮入串 +i+<-i*O# i+Ci*O#+G-i+<i*i> i*i>p5#E+CT*F>sSSASr6:F-AE规釣* GOTOC0PFJ r4:T-»

21、;F疑的.COW0.T)= lE:E-aT眾対,GOKKBpE皑:F“i規约G0T0(6hF) = 3人桂 M:T-*FEi的,GOTO馆<0 - §人槿 rl:EE+T规约60似0任)=1入吨 sGpttS6As4,狀态4人找話,妝态5人栈rEF-hl規约,GOT10(4tF) = 3人桟 M汀附理G0KK4/D2Aft $?,狀态7人栈狀态$人校帽:尸-沁規均,GCT0(7±F) = lBA- 占:TT"F规均.WTDC4J)rZ:E->TS, GCT0f4±E) E人桟r5:F->CE)規妁 G(mKE,F) - 3A r4:T“

22、F規的,G0T0(6tT) - 9A rl:E-E+股约"GOKK0PE - 1A疲 蔽吩析比功!3A2A1AtsA2i+i*Ci+i*(i-H-i)3*箱号践雨柞说朝1Ut*Ci*VCi+*i»#15tW.$5 人樓z津iGOTO(叫 E)=耳人誓3r4:T->FS«a GOTOCArT) - 2扎栈4-#T+i%i 我应;EfTJSES GOTDC0PEJ LAiS5飢+i*Ci+i*Ci4+i)»sE(UiS6A4601670165耗+iGOTDC61F) - 3A5g飢心fM:TF規约"GDTDC6J - 9A«901W

23、庭斗Ts7a>t7Att1001697#+T*s4朋恋4入横11飢的刊ft 41*(120165745ffi+r*G+i*Ci+i»#r6;F->iafip G0TDC4.F3 3A*S13169743妊寸T%FH:T->FSW? CDTDC43T) - 2A«14JME+T*(Tr2:E->TttftB GOTOQ4J) 旨人哎15016974B+t*Ci+in#lb飢関me#E+T*(E+1701S74B65#E+T*(E+i"i卄i)期r&FiSaSP GOTCIC6.F)18169743#E+T*CE+F規均.GOTOIdD

24、1901697469#e+t*(E+TZ9如的科硒7#E+T*CE+T*Ci+-i5)54ptt®4A«21#E+T-(E+T*(it+i)#s5,tt®SA«起ei«74&6974S#E+T*CE+T*(ir6;F->iSa GWC4.FJ 力MS23016974K9743#E+T*CE+T*fF+iB#网: TjF规筠1, GOTOC4.T3 口 2A悝24«16974&69742«£+f(E+f(T*!»#r2:E->Tft3 GOTOC叽 E) SAfl25#E:+T*

25、CE+T*CE2E#E+T*(E+T*(E+*!»岀W1五、实验总结通过本次试验,我对LR文法有了更深刻的认识。LR分析法的归约过程是规范推导的逆过程,所以LR分析过程是一种规范归约过程。LR分析法正是给出一种能根据当前分析栈中的符号串和向右顺序查看输入串的K个(K > 0)符号就可唯一地确定分析器的动作是移进还是归约和用哪个产生式归约,因而也就能唯一地确定句柄。其中LR(0)分析器是在分析过程中不需向右查看输入符号,因而它对文法的限制较大,然而,它是构造其它LR类分析器的基础。当K=1时,已能满足当前绝大多数高级语言编译程序实现的需要。LR(1)项目集族的构造是LALR(1)

26、分析器的构造原理和基础。首先根据文法构建 LR(1)项目集规范族,再根据项目集族构建规范LR分析表,最后用状态栈与符号栈两个栈来分析输入串,分析输入串时有ACTION和GOTO两个动作,要注意各种情况下的出错处理。附录:实验一源代码:import java.util.*;import java.awt.*;import javax.swi ng.*;public class WordA naly exte nds JFrameJTextArea A1 = new JTextArea();Stri ng k = "do","e nd","for&

27、quot;,"if","pri ntf',"sca nf","the n","while"ArrayList <Stri ng> id=new ArrayList<Stri ng>();ArrayList <Stri ng> ci=new ArrayList<Stri ng>();Stri ng a = "+","-","*","/","+",&quo

28、t;-"Stri ng b = "<","<=","=",">",">=","<>"char s =String in putstri ng;Stri ng strToke n =""char ch;int pint;int row;int line;WordA naly(Stri ng s)super(s);this.setSize(800,400);this.setVisible(true);Contain

29、er c = getC onten tPa ne();c.add(A1);in putstri ng = "if i = 0the n n+;na <= 3b %);"row = 1;line = 1;pint = -1;A1.appe nd(”源程序字符串:n");A1.appe nd(i nputstri ng+"nn ”);A1.append("分析:n");A1.append("t"+"单词"+"tt"+"二元序列"+"tt&quo

30、t;+"类型"+"tt"+"位置(行,列) "+"n");void GetChar()pi nt+;if(pint < in putstri ng.len gth()ch = in putstri ng.charAt(p in t);if(ch = ' ; '| ch = 'n')n extrow();GetChar();else ch=''void n extrow()row+;lin e=1;void GetBC()while(ch = ' '

31、;)GetChar();void Retract()pi nt-;ch=in putstri ng.charAt(p in t);boolea n isdigit(char c)if(c >= 48 && c <= 57)return true;return false;boolea n isletter(char c)if(c >= 65 && c <= 90) | (c >= 97 && c <= 122) return true;return false;int Reserve(Stri ng s)int

32、 i;for(i=0;i < k.le ngth;i +)if(s.equals(ki)return i;return -1;int In sertid(Stri ng s)int i;for(i=0;i < id.size();i +) if(s.equals(id.get(i) return i;elseid.add(s);return -1;int In sertC on st(Stri ng s)int i;for(i = 0;i < ci.size();i+)if(s.equals(ci.get(i)return i;elseci.add(s);return -1;

33、void snum ()strToke n=""while(isdigit(ch)strToke n = strToke n+ch;GetChar();if(isletter(ch)while(isletter(ch)|isdigit(ch) strToke n = strToke n + ch; GetChar();output(0,strToke n,'');strToke n="”;void sn_l()strToke n=""while(isletter(ch)|isdigit(ch) strToke n = strTo

34、ke n + ch; GetChar();boolea n read next()char a = in putstri ng.charAt(p in t+1); if(a = '=' | a = '>')return true;return false;boolea n read next1()char a = in putstri ng.charAt(p in t+1); if(a = '+' | a = '-')return true;return false;int ss(char c)int i;for(i = 0

35、;i < sen gth;i+)if(c = si)output(2, "”,c);GetChar();return i;return -1;int sa(char x)int i;if(read next1() = false)for(i = 0;i < aen gth;i +)if(ai.le ngth() = 1) if(ai.equals(Character.toStri ng(x) output(3, ai,'');GetChar();return i;elsechar m = new char2;m0 = x;GetChar();m1 = ch

36、;for(i = 0;i < aen gth;i +)if(ai.le ngth() = 2) if(ai.equals(Stri ng.copyValueOf(m) output(3, ai,'');GetChar();return i;Retract();return -1;int sb(char x)int i;if(read next() = false)for(i = 0;i < ben gth;i +)if(bi.le ngth() = 1)if(bi.equals(Character.toStri ng(x)oufpuf?b 三z=Gefcharo 八

37、 recrne-se 宀char m= H new charE八mo一 H><Gefchaom三H oh八for(一 H 0= A bengfhT+) ifs二.CDngfho HH 2)宀 if(b 三.equa 更 s=ring.copyva-ueof(m)宀oufpuf?b 三z)八 Gefchaoref urnRefraco八 recrn >v-八swifchgA.append(=w-+a+=Fr-+=EITOr=+=Fr-+=EITOr=+>2=+=(=+row+=+=ne+=)=+-vr= break 八case 9A.append(=w-+s+>2=

38、+=EITOr=+>w-+-rTiITOr=+>w-+=(=+row+=+=ne+=)=+>n£ break 八case 1 -Al appends 违+s+>2=+=u=+s+=)=+=Fr-+=>M =+>2=+=(=+row+=+=ne+=)=+-vr=break 八case NAl appends 违+a+=Fr-+=(2=+a+=)=+=Fr-+= V 初 =+>2=+=(=+row+=+=ne+=)=+-vr=break 八case9?Al appends 违+s+>2=+=(3=+s+=)=+yw+=w应=+>2=+

39、=(=+row+=+=ne+=)=+-vr=break 八A.append(=w-+s+>2=+=(4=+s+=)=+=Fr-+=>洲 应w=+>2=+=(=+row+=+=ne+=)=+-vr= break 八 case 5 A.append(=w-+s+>2=+=(5=+s+=)=+=Fr-+=<蒲=+>2=+=(=+row+=+=ne+=)=+-vr= break 八casep?Al appends 违+s+>2=+=(6=+s+=)=+yw+=wt话=+>2=+=(=+row+=+=ne+=)=+-vr=break 八-ine+void

40、ana-yze()宀pinf H匕八Gefchapwhi-e(pinf A inpufsfring.-engfho)宀Gesco 八if(isdigif(ch)Msnum()八if(s=rToken.-engfh()'il0)宀-nsertconsf(s=rToken)八ouf puf(5ys=rT0kenz)八e-se if(is-efCDr(ch)x30if(Reserve(s=rToken) HH 匕)宀-nsertid(sfrToken)八o uf p uf (a s=rT0 ke nz)八e-se 宀o uf p uf?s=rTO ke nzxe-se if(ss(ch)Ha

41、宀 e-se if(sa(ch)H匕)宀e-se if(sb(ch)H匕)宀elseoutput(-1, "”,ch);GetChar();public static void main( Stri ng args)throws Excepti on WordAnaly a = new WordAnaly(” 词法分析器!"); a.a nalyze();实验二源代码:import java.util.*;import java.awt.C ontainer;import javax.swi ng.JFrame;import javax.swi ng.JTextArea;p

42、ublic class LL1 exte nds JFrameJTextArea A2 = new JTextArea();Stri nggrammar"E->TG","G->+TG|-TG","G-> & ","T>FS","S->*FS|/FS","S- > £ ","F>(E)","F->i"char Vn = 'E','G',

43、9;T','S','F'char Vt = '+','- ','*','/','(',')','i','#','£ 'boolean First = new boolea n5 10; boolean Follow = new boolea n5 10; Stri ng Graphic = new Stri ng5 8;LL1(Stri ng s)super(s);this.setSize(600,40

44、0); this.setVisible(true);Container c=getC onten tPa ne(); c.add(A2);first();follow();graphic();int loc_vn( char c)for(i nt i = 0;i < 5;i +)if(c = Vn i)return i;return -1;int loc_vt(char c)for(i nt i = 0;i < 9;i +)if(c = Vti)return i;return -1;void first_of_each(Stri ng s, int p)int a = loc_vn

45、( s.charAt(O);if(loc_vt(s.charAt(p) != -1)Firstaloc_vt(s.charAt(p) = true;elseif(Firstloc_v n(s.charAt(p)9 != true)first_ of_vn( s.charAt(p);for(i nt i = 0;i < 9;i +)if(Firstloc_vn(s.ch arAt(p)i && Vti != '£ ')Firstai = true;if(Firstloc_vn(s.charAt(p)loc_vt('e ') = tr

46、ue)if(p = s.le ngth()-1)Firstaloc_vt('e ') = true;if(s.charAt(p+1) != '|')p +;first_of_each(s,p);elseFirstaloc_vt('e ') = true;void follow_of_each(Stri ng s,i nt p)if(p = s.le ngth()-1 | (p<s.le ngth()-1 && s.charAt(p+1) = '|')if(s.charAt(0) != s.charAt(p)i

47、f(!Followloc_v n(s.charAt(0)9)follow_of_v n(s.charAt(O);for(i nt i = 0;i < Vt.le ngth;i +)if(Followloc_v n(s.charAt(O)i) Followloc_v n( s.charAt(p)i = true;if(p < s.le ngth()-1 && s.charAt(p+1) != '|')if(loc_vt(s.charAt(p+1) != -1)Followloc_v n(s.charAt(p)loc_vt(s.charAt(p+1) =

48、 true;elsefor(i nt i = 0;i < 9;i+)if(Firstloc_vn(s.charAt(p+1)i&& Vti != '£ ')Followloc_v n( s.charAt(p)i = true;boolea n t = true;for(i nt i = p + 1;i < s.len gth();i +)if(loc_vt(s.charAt(i) != -1)t = false; break;if(s.charAt(i) = '|')break;if(!Firstloc_v n(s.char

49、At(i)loc_vt('&')t = false;if(t)if(!Followloc_v n(s.charAt(0)9)follow_of_vn(s.charAt(0);for(i nt i = 0;i < 9;i +)if(Followloc_v n(s.charAt(O)i)Followloc_v n( s.charAt(p)i = true;int locate(i nt i,Stri ng s)for(i = i + 1;i < s.len gth();i +) if(s.charAt(i) = '|') return i;ret

50、urn -1;void first_ of_vn( char c)for(i nt i = 0;i < grammar.le ngth;i+)Stri ng s = grammar" if(s.charAt(0) = c) int p = 3;first_of_each(s,p);while( locate(p,s) != -1 && p < s.le ngth() p = locate(p,s); first_of_each(s,p+1); Firstloc_vn(c)9 = true;void follow_ of_vn( char c )if(c =

51、 'E')Followloc_v n(c)loc_vt('#') = true;String s;for(i nt i = 0;i < grammaren gth;i +)s = grammari;for(i nt p = 3;p < s.le ngth();p +) if(s.charAt(p) = c ) follow_of_each(s,p);Followloc_v n(c )9 = true;void first()for(i nt i = 0;i < 5;i +) if(Firsti9 != true) first_of_v n(Vn

52、i);void follow()for(i nt i = 0;i < 5;i +)if(Followi9 != true) follow_ of_vn(Vn i);void add_to_gra(i nt p,i nt i,Stri ng s)char a = grammari.charAt(O);if(loc_vt(grammari.charAt(p) != -1) if(grammari.char At(p) != '& ')Graphicloc_v n( a)loc_vt(grammari.charAt(p) = s; else for(i nt k = 0

53、;k < 8;k+) if(Followloc_v n(a)k)Graphicloc_v n( a)k = s;elsefor(i nt k = 0;k < 8;k +)if(Firstloc_v n( grammari.charAt(p)k)Graphicloc_v n( a)k = s;£ ')if(Firstloc_v n(grammari.charAt(p)loc_vt('for(i nt k = 0;k < Vt.le ngth - 1;k +) if(Followloc_v n(a)k) Graphicloc_v n( a)k = s;v

54、oid graphic()in t p,l;String s;for(i nt i = 0;i < grammaren gth;i +)p = 3;while(p < grammari.le ngth()l = locate(p,grammari);if(l = -1)l = grammari.le ngth();s = grammari.substri ng(p, I);add_to_gra(p,i,s);p = l+1;void an alyze(Stri ng s)A2.append(” 输入串:"+s+"n"+"分析:"+"n");A2.append(”步骤"+"t"+"分析栈"+"t"+"剩余输入串"+"t"+"所用产

温馨提示

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

评论

0/150

提交评论