自顶向下语法分析复习总结

符集

FIRST集

原则:求FIRST(A),观察左边为A的产生式,如: A->…

情况1

A->a… (a为终结符) 则有:
F I R S T ( A ) ∋ a FIRST(A)\ni a FIRST(A)a

情况2

A->B… (B为非终结符)则有:
F I R S T ( A ) ⊇ F I R S T ( B ) FIRST(A) \supseteq FIRST(B) FIRST(A)FIRST(B)

FOLLOW集

原则:求FOLLOW(A),观察右边含有A的产生式,如:…->…A…
特别说明:若A为文法的初始符,则规定:
F O L L O W ( A ) ∋ # FOLLOW(A) \ni \# FOLLOW(A)#

情况1

S->…Aa…(a为终结符),则有:
F O L L O W ( A ) ∋ a FOLLOW(A) \ni a FOLLOW(A)a

情况2

S->…AB (B为非终结符)

情况2.1

ξ ∉ F I R S T ( B ) \xi \notin FIRST(B) ξ/FIRST(B)
F O L L O W ( A ) ⊇ F I R S T ( B ) FOLLOW(A) \supseteq FIRST(B) FOLLOW(A)FIRST(B)

情况2.2

ξ ∈ F I R S T ( B ) \xi \in FIRST(B) ξFIRST(B)
F O L L O W ( A ) ⊇ F I R S T ( B ) − { ξ } ∪ F O L L O W ( B ) FOLLOW(A) \supseteq FIRST(B)-\{\xi\} \cup FOLLOW(B) FOLLOW(A)FIRST(B){ξ}FOLLOW(B)

情况3

S->…AB(B为非终结符)

情况3.1(和2.1一样)

ξ ∉ F I R S T ( B ) \xi \notin FIRST(B) ξ/FIRST(B)
F O L L O W ( A ) ⊇ F I R S T ( B ) FOLLOW(A) \supseteq FIRST(B) FOLLOW(A)FIRST(B)

情况3.2

ξ ∈ F I R S T ( B ) \xi \in FIRST(B) ξFIRST(B)
F O L L O W ( A ) ⊇ F I R S T ( B ) − { ξ } ∪ F O L L O W ( S ) FOLLOW(A) \supseteq FIRST(B)-\{\xi\} \cup FOLLOW(S) FOLLOW(A)FIRST(B){ξ}FOLLOW(S)

情况4

S->…A,则有
F O L L O W ( A ) ⊇ F O L L O W ( S ) FOLLOW(A) \supseteq FOLLOW(S) FOLLOW(A)FOLLOW(S)

SELECT集

求SELECT(A->B),(这里的B可能是终结符也可能是非终结符)就是利用前面求出的FIRST集和FOLLOW集,要注意SELCET的括号里是一个产生式

情况1

ξ ∉ F I R S T ( B ) \xi \notin FIRST(B) ξ/FIRST(B)
S E L E C T ( A − > B ) = F I R S T ( B ) SELECT(A->B) = FIRST(B) SELECT(A>B)=FIRST(B)

情况2

ξ ∈ F I R S T ( B ) \xi \in FIRST(B) ξFIRST(B)
S E L E C T ( A − > B ) = F I R S T ( B ) − { ξ } ∪ F O L L O W ( A ) SELECT(A->B) = FIRST(B) -\{ \xi\} \cup FOLLOW(A) SELECT(A>B)=FIRST(B){ξ}FOLLOW(A)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
自顶向下语法分析程序是一种应用于编译器设计和语言处理的算法。它基于产生式规则的递归调用过程,通过分析输入的语法来构建语法树。 在C语言中,自顶向下语法分析程序可用于验证源代码的语法正确性,并将其转化为可以执行的目标代码。通常,自顶向下语法分析程序具有以下几个主要步骤: 1. 词法分析:将输入的源代码分割成一个个的词法单元,如变量、关键字、运算符等。 2. 语法定义:通过产生式规则定义语法的结构,例如语句、表达式、循环等。 3. 语法分析:根据产生式规则进行递归调用,将输入的词法单元转化为语法树的分支。 4. 错误处理:如果在语法分析过程中发现不符合语法规则的错误,程序会进行相应的错误处理并报告错误信息。 5. 语义处理:根据语法树进行语义分析,包括符号表的建立和类型检查等。 6. 目标代码生成:根据语法树和符号表,将源代码转化为可以执行的目标代码,如机器码或中间代码。 C语言的自顶向下语法分析程序通常使用递归下降分析法实现,通过函数的递归调用来表示产生式规则的应用顺序。函数的每个调用对应一个产生式规则,通过逐步分解输入的语法单元,最终构建出完整的语法树。 自顶向下语法分析程序在编译器设计中具有重要的作用,能够帮助开发者检测和调试代码中的语法错误,并将其转化为可执行的目标代码。同时,自顶向下语法分析程序也为其他语言处理工具提供了基础,如语法高亮显示、代码格式化和自动补全等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值