1 / 30

文法例1

文法例1. 文法 Gz:Z  D Z  Z D D  0 |1 | … |9 句子12的推导: Z  ZD DD 1D 12 Z  ZD DD D2 12. Z. Z. D. D. 2. 1. 文法例2. 文法 G=({+,*,i,( ,)},{E},E,P), 其中 P 为: E  i E  E + E E  E * E E  ( E ) 句型 i * i + i :. E. E. E. *. i. E.

oralee
Télécharger la présentation

文法例1

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 文法例1 文法Gz:Z  D Z  Z D D  0 |1 |…|9 句子12的推导: Z  ZD DD 1D 12 Z  ZD DD D2 12 Z Z D D 2 1

  2. 文法例2 • 文法G=({+,*,i,( ,)},{E},E,P),其中P为: • E  i • E  E + E • E  E * E • E  ( E ) • 句型i * i + i :

  3. E E E * i E + E E i i E E + 推导2的语法树 E E i * i i 推导1的语法树 推导1: E  E + E  E * E + E  i * E + E  i * i + E  i * i + i 推导2: E  E * E i * E  i * E + E  i * i + E  i * i + i

  4. <Stm> →if <Exp> then <Stm> else <Stm> <Stm> →if <Exp> then <Stm> <Stm> → ...... 假设有条件语句 if e1 then if e2 then s1 else s2 则可有下图所示的两棵不同的语法分析树: <Stm> <Stm> then <Exp> <Stm> else <Stm> if <Exp> then <Stm> if e1 s2 e1 <Stm> then <Exp> <Stm> else <Stm> then if <Exp> if s1 s1 s1 e2 e2 if语句的二义性

  5. 文法二义性的消除 • 二义性文法的判定是递归不可解的 • 消除二义性的方法: • 1.设置一规则,该规则可在产生二义性的情况下,指出哪一个分析树是正确的 • 2.将文法改变成一个强制正确分析树的构造格式

  6. 表达式的无二义性文法 • E  T | E + T • T  F | T * F • F  ( E ) | i • E  T • E  E + T • T  F • T  T * F • F  ( E ) • F  i

  7. If语句的无二义性文法定义 Stmt  Matched_stmt | Unmatched_stmt Matched_stmt  if E then Matched_stmt else Matched_stmt | other Unmatched_stmt  if E then Stmt | if E then Matched_stmt else Unmatched_stmt

  8. 有关文法实用中的一些说明 • 有关文法的实用限制 •有害规则 U  U •多余规则{ 不可到达的,不可终止的 } • 上下文无关文法中的规则 A  

  9. 文法G[s]: • S B e • B  C e • B  A f • A  A e • A  e • C  C f • C  C • D  f

  10. 求能推出的非终极符 • S_Lambda = {Aj | Aj   PSet}; • 对pPSet:Ap X1…Xn, 如果XiS_Lambda, 0in,则 S_Lambda = S_Lambda  {Ap} • 重复第二步,直至S_Lambda收敛为止

  11. 消除空产生式算法 • S_Lambda = {Aj | Aj+ }; • 删除所有的空产生式和只能导出空串的非终极符。 • 对剩余的每个产生式P:AC1C2…Cp 如果有CiS_Lambda,因为删除了所有的空 产生式,需要扩充一些产生式: AC1…Ci-1Ci+1…Cp • 重复上述过程直至不出现新的产生式为止。

  12. 语法分析方法 • 自顶向下分析方法 递归子程序法 LL分析方法 • 自底向上分析方法 优先关系法 LR分析方法

  13. Z a B d b B c 自顶向下分析概述 • 从文法开始符出发试图推导出所给的终极符串。 • 例 G[z] : [1] Z aBd [2] B d [3] B c [4] B bB 对给定的终极符串abcd,推导过程: Z [1] aBd [4] abBd [3] abcd 自顶向下的语法分析过程【Sf,Rest,Action(D/M/S/E)】 Z # abcd # Derivation aBd # abcd # Match Bd # bcd # Derivation bBd # bcd # Match Bd # cd # Derivation cd # cd # Match d # d # Match # # Success

  14. Z 自底向上分析概述 B B • 从终极符串出发归约(reduce)出文法的开始符。 • 例 G[z] : [1] Z aBd [2] B d [3] B c [4] B bB 对给定的终极符串abcd,归约过程: abcd[3] abBd[4] aBd[3]Z a b c d 自底向上的语法分析过程【Analysis ST,Input,Action(S/R/E/S)】 # abcd # Shift #a bcd # Shift #ab cd # Shift #abc d # Reduce[3] #abB d # Reduce[4] #aB d # Shift #aBd # Reduce[1] #Z # Success

  15. 文法G1[S]: S  pA | qB A  cAd | a 输入串W= pccadd。自顶向下的推导过程为: S  pA  pcAd  pccAdd  pccadd 相应的语法树为: S A p c A d c d A a

  16. p A A c c A a 文法G2[s]: S Ap |Bq A a |cA B b |dB 输入串W=ccap。自顶向下的推导过程为: S  Ap  cAp  ccAp  ccap 相应的语法树为: S

  17. First集的定义 • 设G=(VT,VN,S,P)是上下文无关文法, (VT VN )* First()={ aVT | *a...} (if *  then {}) • 可以根据当前的输入符号是属于哪个产生式右部的首符集而决定选择相应产生式进行推导。

  18. S a A b A S  d 文法G3[S]: S  aA | d A  bAS |  输入串W=abd。自顶向下的推导过程为: S  aA  abAS  abS  abd 相应的语法树为:

  19. Follow集的定义 设G=(VT,VN,S,P)是上下文无关文法,AVN,S是开始符号 • Follow(A)={ a VT | S+ ...Aa... }  (if S*......A then {#} ) • 当文法中存在产生式形如:A时,如果当前的字符属于Follow(A),则用空取代A的出现。

  20. 三个集合的定义 • First() ={ a VT | * a......}  ( if * then {} ) • Follow(A) = { a VT | S+ ....Aa..... }  ( if S*......A then {#} ) • Predict(A→) = First() , 当First() = First()-{}Follow(A) ,当First()

  21. 计算First(X)集 对每一文法符号X计算First(X) • 若XVT,First(X)={X} • 若XVN则 First(X)={a| Xa…PSet,a VT} • 若XVN,且有产生式X,则  First(X) • 若XVN,有产生式XY1Y2…Yn,且Y1,Y2,…,Yi VN 当Y1,Y2,…,Yi-1* , 则First(Y1)-{},First(Y2)-{},… First(Yi-1)-{}, First(Yi)都包含在First(X)中。 当Yi * (i=1,2,…n), 将{}并入First(X)中。

  22. 计算First()集 若符号串=X1X2…Xn, • 当X1,X2,…Xi-1*,Xi不能* ,则 • First()=1i-1(First(Xj)-{})  First(Xi) • 若所有Xi都能*,则 • First()= 1nFirst(Xj)

  23. 计算Follow集 1:对所有AVN,令Follow(A):={ };对开始符S, 令Follow(S):={# }; 2:若有产生式A→xBy, 如果First(y) 则: Follow(B):= First(y) 否则 Follow(B):=(First(y)-{})  Follow(A) 3:重复2和3,直至对所有AVN,Follow(A)收 敛为止。

  24. 计算Predict集 • Predict(A→) = First() ,当First()不含 = First()-{ }  Follow(A) , 当First()含

  25. E  T E’ • E’  + T E’ |  • T  F T’ • T’ * F T’ |  • F  id | ( E )

  26. Predict( ETE’ ) = first(TE’) = { id , ( } Predict( E’ +TE’ ) = first(+TE’) = { + } Predict( E’   ) = follow(E’) = { ) , # } Predict( T  FT’ ) = first(FT’) = { id , ( } Predict( T’ *FT’ ) = first(*FT’) = { * } Predict( T’   ) = follow(T’) = { + , ) , # } Predict( F id ) = first(id) = { id } Predict( F (E) ) = first((E)) = { ( }

  27. 3型(正则)文法与自动机 • 3型文法与产生式的形式为: A B 或 A   的文法等价。其中VT+。 • 定理:3型文法与自动机等价

  28. 3型文法到自动机的转换 • 设给定3型文法G=(VN, VT, P, Z),构造一 个自动机A=(S,,,s0,F),使得L(A)=L(G)。 • 构造过程: (1)令S = VN{K},=VT,s0= Z , F={K}. (2)对G中产生式形如: X aY 则定义 (X,a)= YP X  a 则定义 (X,a)= KP 其中K是新符号。 则L(A)= L(G)

  29. 自动机到3型文法的转换 • 给定自动机A=(S,,,s0,F),构造等价的3型文法G=(VN, VT, P, Z),使得L(A)=L(G) (只有一个初始状态) • 构造过程: 设F’= {Y| YF且Y有输出边} (1) 令VN= S\F’,VT= , Z= s0 (2) 如有(X,a)=Y : 如果YF,则定义Xa 如果YF’,则定义XaY 则L(A)= L(G)

  30. 文法G[N]: N  D |N D D  0 |1 | 2| …| 9 (1)写出5678和021的最左推导和最右推导,并给出 它们的语法树形式 (2)举出三个无最右推导的句型 • 文法G[S]: S  uBDz B  Br | w D  EF E  y |  F  x |  计算非终极符的First、Follow集,产生式的 Predict集

More Related