第4章词法分析重点容:正规式转化为DFAa、正规式->NFAb、NFA -> DFA(子集法)c、DFA化简(分割法)题目1:课件例题:a、为R=(a|b)*(aa|bb)(a|b)*构造NFAb、从NFA构造DFA的算法c、化简题目2:4.7 例1:构造正规式相应的DFA :1(0|1)*101 按照以下三步:(1)由正规表达式构造转换系统(NFA )(2)由转换系统(NFA )构造确定的有穷自动机DFA (3)DFA 的最小化 答:(1)构造与1(0|1)*101等价的 NFA(2)将NFA 转换成DFA :采用子集法,即DFA 的每个状态对应NFA 的一个状态集合:0 1 X A A A AB AB AC AB AC A ABY ABYACAB除X ,A 外,重新命名其他状态:0 1 X A AAB(0|1)*111(0|1)*101XYXABCDY1XABCY1110,1B C BC A DD C B2、寻找子集中不等价状态{X,A,B,C}=>{X},{A,B}{C}=>{X}{A}{B}{C},无需合并。
最后生成DFA:题目3:自习、书本练习4.7,参考答案见《z4 书本练习4.7.doc》已知文法G[S]:S→aA|bQ A→aA|bB|b B→bD|aQ Q→aQ|bD|b E→aB|bF F→bD|aE|b1、构由于不可到达,去除E、F相关的多余产生式2、由新的G[S]构造NFA如下3、NFA的转换表:a bS A QA A B,ZB,Z Q DQ Q D,ZD A BD,Z A DB Q D4、子集法重命名状态:(上标0:初态,*:终态)a b00 1 31 1 22* 3 43 3 54 1 65* 1 46 3 4X A B C D1 1 0 1115、使用分割法化简以上DFA G:5.1 令G={(0,1,3,4,6),(2,5)}// 分别为非终态和终态集5.2 由{0,1,3,4,6}a={1,3},{0,1,3,4,6}b={3,2,5,6,4}将{0,1,3,4,6}划分为{0,4,6}{1,3},得G={(0,4,6),(1,3),(2,5)}5.3 由{0,4,6}b={3,6,4},将之划分为{0},{4,6},得G={(0),(4,6),(1,3),(2,5)}5.4 观察后,G中状态不可再分,为最小化DFA。
6、分别用0,4,1,2代表各状态,DFA状态转换图如下:造相应的最小的DFA第5章自顶向下的语法分析重点容:LL(1)文法a、去除左递归b、LL(1)文法的判定(first、follow、select集)c、预测分析表d、使用栈和预测分析表对输入串的分析题目1:课件例题:消除左递归+判定+分析算术表达式文法GE→E+T│TT→T*F│FF→(E)│Id、分析输入串i+i*i#(1)消除G的左递归得到文法G‘E→TE 'E'→+TE'│εT→FT 'T'→*FT'│εF→(E)│i(2)求出每个产生式的select集,G’是LL(1)文法SELECT(E→TE' ) = { (,i } SELECT(E'→+TE' ) = { + } SELECT(E'→ε ) = { ),# } SELECT(T→FT' ) = { (,i } SELECT(T'→*FT' ) = { * } SELECT(T'→ε ) = { +,),# } SELECT(F→(E) ) = { ( } SELECT(F→ i ) = { i }(3)依照选择集合把产生式填入分析表注:表中空白处为出错题目2:作业、习题5.1:消除左递归+判定+分析G[S]:S->a|^|(T) T->T,S|Sd、分析输入串(a,a)#文法G[S]:S->a|^|(T),T->T,S|S(1)给出对(a,(a,a))的最左推导(2)改写文法,去除左递归(3)判断新文法是否LL1文法,如是,给出其预测分析表(4)给出输入串(a,a)#的分析过程,判断其是否文法G的句子。
答:(1)对(a,(a,a))的最左推导为:S=>(T)=>(T,S)=>(S,S)=>(a,S)=>(a,(T))=>(a,(T,S))=>(a,(S,S))=>(a,(a,S))=>(a,(a,a))(2)改写文法为:0) S→a 1) S→ʌ2) S→(T) 3) T→SN 4) N→,SN 5) N→εFIRST (→,S N) = {, }FIRST (→ε) ={ε}FOLLOW (N) ={)}由于SELECT(N→,S N)∩SELECT(N→ε)={, }∩{)}=ᴓ所以文法是LL(1)的。
(3)预测分析表:可由预测分析表中,无多重入口判定文法是LL(1)的。
(4)对输入串(a,a)#的分析过程为:题目3:复习、书本5.6例1:判定+分析G[S]:S→aH,H→aMd|d,M→Ab|ε,A→aM|e d、分析输入串aaabd#(1)判断G[S]是否为LL(1)文法;若是,构造其预测分析表;Select(H→aMd)={a} , Select(H→d)= {d} ;Select(M→Ab)= {a,e}, Select(M→ε)= {d,b};Select(A→aM)= {a} , Select(A→e)= {e}相同左部产生式的select集的交集均为空,所以G[S]是LL(1)文法。
预测分析表:(2)分析aaabd#是否G[S]的句子。
使用栈和预测分析表对输入串的分析:第6章自底向上的语法分析重点容:算符优先文法a、非终结符的firstvt集和lastvt集的计算b、算符优先关系表c、使用栈和算符优先关系表对输入串的归约题目1:课件例题:文法:E→E+T|TT→T×F|FF→(E)|Ic、算符优先归约输入串i+i#(1)求各非终结符的FIRSTVT集与LASTVT集(2)计算算符优先关系表并说明此文法是否算符优先文法(3)给出输入串i+i#的算符优先分析过程非终结符FIRSTVT LASTVTE + × i (+ × ) iT x i (× ) iF i () i+ x ( ) i # + > < < > < > x > > < > < > ( < < < = <) > > > >i > > > ># < < < < = (3)对输入串i+i#的算符优先分析过程为:题目2:作业、习题6.1、复习:文法G[S]:S->a|^|(T) T->T,S|Sc、算符优先归约输入串(a,a)#文法G[S]:S->a|^|(T),T->T,S|S(1)计算G[S]的FIRSTVT、LASTVT(2)改造算符优先关系表并说明G[S]是否算符优先文法(3)给出输入串(a,a)#的算符优先分析过程,判断其是否文法G的句子。
答:文法展开为:S→aS→ʌS→(T)T→T,ST→S(2)算符优先关系表:(3)对输入串(a,a)#的算符优先分析过程为:题目3:自习、书本练习6.4,参考答案见《z6 书本练习6.4.doc》已知文法G[S]:S→S;G S→G G→G(T) G→H H→a H→(S) T→T+S T→Sc、算符优先归约输入串a;(a+a)#(1)构造算符优先关系表FIRSTVT(S)={;}∪FIRSTVT(G) = {; , a , ( }FIRSTVT(G)={ ( }∪FIRSTVT(H) = {a , ( }FIRSTCT(H)={a , ( }FIRSTVT(T) = {+} ∪FIRSTVT(S) = {+ , ; , a , ( }LASTVT(S) = {;} ∪LASTVT(G) = { ; , a , )}LASTVT(G) = { )} ∪LASTVT(H) = { a , )}LASTVT(H) = {a, }}LASTVT(T) = {+ } ∪LASTVT(S) = {+ , ; , a ,} } 即:LASTVT(S)> ;; < FIRSTVT(G)由G→G(T…LASTVT(G)> (( < FIRSTVT(T)由G→…T)LASTVT(T)> )由G→…(T)( = )由T→T+SLASTVT(T)> ++ < FIRSTVT(S)由H→(S)( < FIRSTVT(S)LASTVT(S)> )( = )由S-> #S##< FIRSTVT(S)LASTVT(S)> ## = #(2) 分析a;(a+a) // S→S;G |G G→G(T) |H H→a |(S) T→T+S |S。