• day05_编译原理学习


    第四章 语法分析

    FOLLOW的计算和定义

      • 定义:被定义为\alpha从推导得到的串首符号的集合(其中\alpha是任意的文法符号)。
      • 算法:求解的方法:不断应用以下规则,直到没有新的终结符号或空集被加入到任何集合中为止。
        • 1)如果X是一个终结符号,那么= X;
        • 2) 如果X是一个非终结符,且X\rightarrow Y\textup{1}Y\textup{2}...Y\textup{k}(k \geq 1)是一个产生式,\alphaFIRST(Y\textup{i})中且\epsilon在所有的FIRST(Y\textup{1}-Y\textup{i})中,也就是说,Y\textup{1}...Y\textup{i-1}经零步或者多步推导可以得出\epsilon。如果对于所有的i= 1,2,...,k,\epsilonFIRST(Y\textup{i})中,那么就将\epsilon加入到FIRST(X ).
        • 3)如果X\rightarrow \epsilon是一个产生式,那么将\epsilon加入到
      • 例子:
      • 具体解题思路:求解文法中所有的产生式左部的FIRST集合,只需要看每个左部的所有产生式右部的首字符A。
        • 1. 如果A是终结符,那么将其加入到左部对应的 集合中。
        • 2. 如果A是非终结符,那么继续求解FIRST(A),并将FIRST(A)加入到左部对应的集合中去。
        • 3. 如果A \Rightarrow \epsilon,那么也将\epsilon加入其中。
        • 注意:如果产生式的右部由“|”连接,对于"|"左右两边的句型运用上述相同的规则。
      • 计算X\textup{1}X\textup{2}...X\textup{n}FIRST集合
    • FOLLOW

      • 定义:FOLLOW(A)可能在某些句型中紧跟在A右边的终结符号的集合。
      • 求解所有非终结符A的FOLLOW(A)集合时,不断应用以下规则,直到不再有新的终结符可以加入到任意的FOLLOW集合中为止。
        • 1) 将\$(是输入右端的结束标记)放入到FOLLOW(S)集合中,其中S为文法的开始符号
        • 2)如果存在一个产生式,那么FIRST(\beta )中除了\epsilon之外的所有符号都在中。
        • 3)如果存在一个产生式,或存在产生式FIRST(\beta )包含, 那么FOLLOW(A)中的所有符号都在 中.
      • 具体解题思路:求解所有非终结符的 FOLLOW集合:
        • 1. 先将结束标记 \$ 加入到开始符号FOLLOW 集中,即 FOLLOW(S) = {\$ ,...}。
        • 2. 再将所有非终结符中能推导出\epsilon的非终结符列举到一个集合中。
        • 3. 紧接着对于非终结符B,观察文法中所有产生式的右部是否存在B,如果存在,则判断B在产生式中的句型:
          • 如果是 ,直接将FOLLOW(A)加入到
          • 如果是则需要继续判断\beta是否是终结符
            • 终结符,那么就将其加入到FOLLOW(A)
            • 非终结符,那么就将FIRST(\beta )加入到 中,接着判断该非终结符是否在第二步中的非终结符集合中
              • 不在则进行下一轮判断。
              • 如果在,就将 FOLLOW(A) 加入到   中。
      • 根据 FOLLOW集构造表达式文法的可选集SELECT

        • (day04)定义回顾:由于各个具有相同的左部的产生式的SELECT集不存在交集,故图片中表达式的文法是LL(1)文法。
      • 根据表达式文法的可选集构造预测分析表 

    附:FIRST和FOLLOW集合的计算从定义来看较为晦涩,可以根据要点中“具体解题思路”再反复刷题和观看视频进行理解!

  • 相关阅读:
    性能优化 之 温度与电量
    【Pytorch】Visualization of Feature Maps(1)
    springboot水环境检测系统的设计与实现毕业设计源码041446
    Postman工具之接口测试必学的几个关键点,你知道吗?
    共享平台如何提高财务的分账记账效率?
    凌特杯,第二届,数字音频传输。simulink matlab
    【图像处理】德里奇( Deriche)边缘检测器
    Redis Cluster 数据分片
    聊天、会议、多媒体一体化:多平台支持的即时通讯系统 | 开源日报 No.44
    Hadoop -hdfs的读写请求
  • 原文地址:https://blog.csdn.net/m0_74985290/article/details/141905497