求FIRST(α) Follow LL(1)的算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

求FOLLOW( A ) 的算法
令#为句子的结束符,对于所有非终结符, 重复进行 以下计算
• 1) 将 # 加入到 FOLLOW(S)
• 2) 若 A→αBβ, – 则 FOLLOW(B)=FOLLOW(B)∪(FIRST(β)–{ε})
• 3) 如果A→αB或A→αBβ,且β*ε,A≠B,
– 则 FOLLOW(B)=FOLLOW(B)∪FOLLOW(A)
• ——文法G是 LL(1) 的充要条件
LL(1)文法
• 对G的任意变量A, A→α1|α2|…|αn是所有A产生式, 如果它们满足下列条件,则称G是LL(1)文法, – FIRST(αi)∩FIRST(αj)=Φ i≠j
– 且当ε∈FIRST(αj)时,FOLLOW(A)∩FIRST(αi)=Φ
• LL(1)文法是自顶向下方法能够处理的一类文法 – 第一个 L 表示从左向右扫描输入符号串 – 第二个 L 表示生成最左推导 – 1 表示读入一个符号可确定下一步推导
求FIRST(α) 的算法
• 令α= X1…Xn
• 初值 – FIRST(α)= FIRST(X1)-{ε}; – k=1; • 循环 – while ε∈FIRST(Xk)&k<n do • FIRST(α)= FIRST(α)∪(FIRST(Xk+1)-{ε}) ; • K=k+1; • 结束处理 – if k=n&ε∈FIRST(Xn) then FIRST(α)=FIRST(α)∪{ε}Biblioteka 自顶向下分析希望文法满足的条件
• 希望:从左到右扫描输入串,寻找它的一个最左推 导,每次有唯一的产生式可用
• 对于 G 的每个非终结符 A 的任何两个不同的候选式 A→α|β
• 1) FIRST(α)∩FIRST(β)=φ • 2) 如果β*ε,则 FIRST(α)∩FOLLOW(A)=φ • 2’)如果α*ε,则 FIRST(β)∩FOLLOW(A)=φ
相关文档
最新文档