[工学]第4章语法分析.pptVIP

  • 0
  • 0
  • 约3.31千字
  • 约 63页
  • 2021-11-26 发布于广东
  • 举报
S.P;第4章 语法分析;4.1 语法分析的任务 4.2 自顶向下分析法 4.3 自底向上分析法 4.4 算符优先分析法 4.5 LR分析法 ;任务:根据文法规则,从源程序单词符号串中识别出语法 成分,并进行语法检查。;+;4.2 自顶向下分析法;【例】 α=acb G[S]: S→aAb A→cd|c ;3.选用A的右部符号串匹配输入串 A有两个右部,选第一个 ;自顶向下分析方法分类 ;1.回溯问题;;效率低的原因;消除回溯的途径:;A→αβ1|αβ2|…|αβn;2.左递归问题;(1)消除直接左递归;【例】文法G[E]: E→E+T| E-T|T T→T*F| T/F|F F→(E)|i ;【例】 条件语句→if布尔表达式 语句 | if布尔表达式 语句;else 语句 ;方法二:将左递归规则改为右递归规则;同一非终结符有多个候选式时 ;LL的含义 -自左向右扫描分析输入符号串 -从识别符号开始生成句子的最左推导 LL(1):向前看一个输入符号,便能唯一确定当前应选择的规则 LL(k):向前看k个输入符号,才能唯一确定当前应选择的规则;同一非终结符有多个候选式时 ;LL(1)文法的引入;LL(1)文法的引入;LL(1)文法的判别 ;1. FIRST集 ;(1)若α=aα′,且a∈VT ,则a∈FIRST(α); 例: FIRST(i)={i} FIRST(+TE)={+};① 将FIRST(X1)中的一切非ε的终结符加进FIRST(α); ② 若ε∈FIRST(X1),则将FIRST(X2)中的一切非ε的终结符加进FIRST(α); ③ 若ε∈FIRST(X1)且ε∈FIRST(X2),则将FIRST(X3)中的一切非ε的终结符加进FIRST(α); ④ 依此类推,若对于一切1≤i≤n,ε∈FIRST(Xi),则将ε加进FIRST(α)。;FIRST(F)={(,i} FIRST(Tˊ)={*,ε} FIRST(T)=FIRST(F)-{ε}={(,i} FIRST(Eˊ)={+,ε} FIRST(E)= FIRST(T)-{ε}={(,i} FIRST(TEˊ)=FIRST(T)-{ε}={(,i} FIRST(+TEˊ)={+} FIRST(ε)={ε} FIRST(FTˊ)= FIRST(F)-{ε}={(,i} FIRST(*FTˊ) ={*} FIRST((E))={(} FIRST(i)={i};2. FOLLOW集 ;构造集合FOLLOW的算法(P67);【例】 G[E] E→TE E→+TE|? T→FT T→*FT|? F→(E)|i;FOLLOW(S)={$}; FOLLOW(A) = FOLLOW(S)∪{*} = {*, $}; FOLLOW(A?)=FOLLOW(A) = {*, $}, FOLLOW(B) = FIRST(A?) ∪ FOLLOW(A?) ∪ FOLLOW(A)={i, *, $}; FOLLOW(B?)=FOLLOW(B)={i, *, $};;3.SELECT 集合(P67);若一个文法满足以下条件,则称该文法G???LL(1)文法:;例 文法G[S] 改写成简单产生式 1 S→ A 2 A→ BA? 3 A?→ iBA? 4 A?→ ? 5 B→ CB? 6 B?→ +CB? 7 B?→ ? 8 C → ) A* 9 C → ( 因为: select(3)∩select(4)=? select(6)∩select(7)=? select(8)∩select(9)=? 所以该文法是LL(1)文法;例文法G[E] 改写成简单产生式 1 E→E+T 2 E→T 3 T→T*F 4 T→F 5 F→(E) 6 F→id 消除左递归: 1 E→TE’ 2 E’→+TE’ 3 E’→ ? 4 T→FT’ 5 T’→*FT’ 6 T’→ ? 7 F→(E) 8 F→id;5.某些非LL(1)文法到LL(1)文法的等价转换 ;S→aSb|A A→bA A→Ac|Bc B→aB B→aB|?;4.2.4 递归下降分析程序及其设计;一般情况下,用非终结符表示过程的名字,过程体则按产生式右部符号串顺序编写。每匹配一个终结符,则再读入下一个符号,对于产生式右部的每一个非终结符,则调用相应的过程。当一个非终结符对应多个侯选式时,则过程体将按可选集来决定选用哪个侯选式。在递归下降法中,递归子程序数等于文法中的非终结符个数。 ;递归子程序的设计方法; 框图设计 ;2021/6/30Wednesday, June 30, 2021

文档评论(0)

1亿VIP精品文档

相关文档