构建First集

  • 求First集步骤

首先,对所有非终结符A, 先设定FIRST(A)= {} (空)
FIRST(A) = { t | A → tw },t为终结符,w为任意类型
然后, 对每一个产生式A → Bw, B为终结符,循环以下步骤(递归)

  • FIRST(A) = FIRST(A) ∪FIRST(B)
  • 当FIRST 集合不再发生变化时,算法终止.
  • 产生式如下

E → TE’
E’ → +TE’ | ε
T → FT’
T’ → *FT’ | ε
F → (E) | id

  • 求First集详细步骤:
  • 第一步填表:
E E’ T T’ F
First(T) + First(F) * (
ε ε id
  • 开始递归填表:
E E’ T T’ F
+ * (
id ε id ε id

  • 插入一个注意事项

  • 若是如下产生式:

  • 注意到A → Da因为D能产生ε,所以First(Da) = {b,a}

  • 所以First(A) = {ε,a,b}

  • 同理可得First表格


构建Follow集

  • 求Follow集步骤

  • 产生式如下

(1)E → TE’
(2)E’ → +TE’ | ε
(3)T → FT’
(4)T’ → *FT’ | ε
(5)F → (E) | id

  • 上面求得的First表如下:

  • E E’ T T’ F
    + * (
    id ε id ε id
  • 求Follow集步骤

    • Follow(E)= {$}(结束符)

    • (1)E → TE'可以看成:E → εTE'E → TE'ε

    • E → εTE'可分析:

      • Follow(T)= First(E’)- {ε},又因为ε属于First(E’),所以Follow(T)并入Follow(E);
    • E → TE'ε可分析:

      • First(ε) = {ε}
      • Follow(E‘) = First(ε) - {ε} = {}(空集),又因为ε属于First(ε),所以Follow(E’)并入Follow(E)
    • 第一次填表得:

    • E E’ T T’ F
      $ Follow(E) First(E’)- {ε}
      Follow(E)
    • (2)E' → +TE' | ε可以看成E' → +TE'E' → +TE'ε

    • E' → +TE'分析得:

      • 只能求得Follow(T) = First(E’)- {ε},又因为ε属于First(E’),所以Follow(T)并入Follow(E’)
    • E' → +TE'ε分析得:

      • Follow(E’) = First(ε) - {ε} = {}(空集),又因为ε属于First(ε),所以Follow(E’)并入Follow(E’),相当于没有
      • 注:递归自己直接不填表,不然程序陷入死递归。
    • 第二次填表得:

    • 注:重复的不写

    • E E’ T T’ F
      $ Follow(E) First(E’)- {ε}
      Follow(E)
      Follow(E’)
    • 后面分析省略,只写出填表步骤,每次分析一条产生式填一次表:

    • 分析(3)T → FT',第三次填表:

    • E E’ T T’ F
      $ Follow(E) First(E’)- {ε} Follow(T) First(T’) - {ε}
      Follow(E) Follow(T)
      Follow(E’)
    • 分析(4)T' → *FT' | ε,第四次填表:

    • E E’ T T’ F
      $ Follow(E) First(E’)- {ε} Follow(T) First(T’) - {ε}
      Follow(E) Follow(T)
      Follow(E’) Follow(T’)
    • 分析(5)F → (E) | id,第五次填表:

    • E E’ T T’ F
      $ Follow(E) First(E’)- {ε} Follow(T) First(T’) - {ε}
      ) Follow(E) Follow(T)
      Follow(E’) Follow(T’)
    • 开始递归,最后完成表格:

    • 首先引用First

    • E E’ T T’ F
      + * (
      id ε id ε id

    • 递归调表Follow表结果

    • E E’ T T’ F
      $ ) + + *
      ) $ ) ) +
      $ $ )
      $

First集、Follow集相关推荐

  1. 编译原理 First集 Follow集 select集 通俗易懂的讲解 + 实例

    #First集Follow集通俗易懂的讲解加实例 ##First 如A->aB | CD 这里面包含了组成First(A)的两种情况: 以终结符开头,当然要把这个终结符(a)放到A的First里 ...

  2. C++实现first集follow集

    1."@"代替字符"ε" 2.同一非终结符如有多条产生式必须写成一行,中间用"|"分隔,不允许有空格 代码存在很多问题,大量"非正 ...

  3. 编译原理 求first集 follow集

    FIrst集: FIRST集是一个文法符号串所可能推导出的符号串的第一个终结符的集合 First集合最终是对产生式右部的字符串而言的,但其关键是求出非终结符的First集合,由于终结符的First集合 ...

  4. FIRST集和FOLLOW集的计算

    文章目录 `FIRST`集的计算 计算`FIRST(x)` 具体算法 计算`$X_21,X_2,X_3,...,X_n$`的`FIRST`集 FOLLOW集的计算 算法 FIRST集的计算 计算FIR ...

  5. 编译原理实验-LL1语法分析器(自动生成First集、Follow集求法)java实现

    编译原理实验-LL1语法分析器(自动生成First.Follow)java 博主在做实验时,参考众多他人代码,发现bug众多,在@moni_mm代码基础上,与伙伴把能看到的BUG都做出修正,同时增添了 ...

  6. FIRST集与FOLLOW集构造步骤

    首先,这两个集主语是候选式,是V*中的一个终结符/非终结符. 由于FOLLOW集的定义和构造步骤里面都涉及FIRST集,故先介绍FIRST集. 一.FIRST集的定义如下: FIRST(α)={a|α ...

  7. 编译原理-First集和Follow集

    刚学first集和follow集的时候,如果上课老师没有讲明白或者自己没听明白,自己看的时候还真是有点难理解,不过结合着具体的题目可以理解的更快. 先看一下两种集合的求法: First集合的求法:   ...

  8. FIRST集和FOLLOW集的构造

    FIRST集和FOLLOW集的定义 注意:1:FIRST集的定义中\(\alpha和\beta\)可以是终结符也可以是非终结符.2:FOLLOW集的定义中\(\mu和\beta\)可以是终结符也可以是 ...

  9. 【编译原理笔记05】语法分析:FIRST集和FOLLOW集的计算,[非]递归的预测分析法,预测分析中的错误处理

    本次笔记内容: 4-4 FIRST集和FOLLOW集 4-5 递归的预测分析法 4-6 非递归的预测分析法 4-7 预测分析法中的错误处理 本节课幻灯片,见于我的 GitHub 仓库:第5讲 语法分析 ...

最新文章

  1. rabbitmq怎样确认是否已经消费了消息_【朝夕专刊】RabbitMQ生产者/消费者消息确认...
  2. 双系统隐藏d盘linux,如何实现双系统的相互隐藏
  3. 制作放两个小图片的按钮 - 回复 xhui 的问题
  4. 【转】什么是SIEM?
  5. win2008r2 AD用户账户的批量导入方法
  6. mysql order by按照汉字拼音进行排序
  7. BZOJ3592 : Architext
  8. Android 系统(256)---camera如何dump image buffer大全
  9. 苹果CarPlay新功能上线,老司机们更方便了
  10. 0817JavaScript--------------循环语句
  11. CSS3中的transform-origin的用法以及与perspective、perspective-orgin的不同
  12. Javascript异步操作(Promise)
  13. 老师常用选择题,选择框,单选框,以及各行业产品配置表单选配置明细等
  14. 解决dll load failed while importing qtgui
  15. 涂料价格上涨原因剖析
  16. day2_python年会抽奖游戏
  17. 通过网易财经爬取股票数据
  18. 核磁共振谱仪定义、发展及基本原理
  19. pdf格式转换成jpg转换器
  20. 690-文件管理和文件系统

热门文章

  1. java 数组协变_java 数组协变
  2. 软件开发计划_软件开发的流程是怎么样的?福州IT告诉你:这五点是你需要掌握的...
  3. uni-app 获取手机状态栏高度
  4. matlab车流量检测,求解释代码,一段交通车流量检测的代码
  5. steam怎么设置邮箱令牌_steam盗号?这样做50%能够避免损失!
  6. 使用 rem 设置文字大小(文字响应式)
  7. 实验:添加AXI IP到设计
  8. JVM笔记1:Java内存模型及内存溢出
  9. 如何使用Windows Live Alerts服务
  10. Intellij idea 设置关闭自动更新