• 编译原理(二)语法分析


     

     终结符一般为大写字母,非终结符一般为小写字母

    BNF范式规定<终结符>,非终结符

    最左推导,最右推导

    语法分析树:

     二义性文法:

     自顶向下分析:

     相关算法:

     用前看符号避免回溯。

    递归下降分析算法:

     LL(1)分析算法:

     文法先去除左递归,再提取左公因子,求FIRST集,NULLABLE集,FOLLOW集

    FIRST集:

    把FIRST集推广到任意串上:

     

     如果LL(1)分析表存在冲突则该文法不属于LL(1)文法

    FIRST集的完整算法:

     一般计算LL(1)分析表注意:

     NULLABLE集:

     NULLABLE集计算过程:

     FOLLOW集的计算:

     求LL(1)分析表的过程:求FIRST集----->求NULLABLE集------->求FOLLOW集------->求FIRST_S集——>求LL(1)分析表(可能会得到冲突)

    构建LL(1)分析表:

    用LL(1)分析表进行LL(1)文法分析

    解决LL(1)分析表的冲突:

    1,消除左递归,变为右递归

     消除间接左递归:

                   

    2,提取左公因子。

     

     

    自底向上分析方法,也称移进-归约分析法(自顶向下最右推导的逆过程):

    LR(0)分析:

          

    分析步骤:

          

    LR(0)分析算法出现的问题:可能会延时报出现的错误,可能会出现移进,归约冲突情况。

    SLR分析算法:

     LR(1)分析算法:

     

    *缩小SLR算法中FOLLOW集的范围

    ------------恢复内容结束------------

     

     终结符一般为大写字母,非终结符一般为小写字母

    BNF范式规定<终结符>,非终结符

    最左推导,最右推导

    语法分析树:

     二义性文法:

     自顶向下分析:

     相关算法:

     用前看符号避免回溯。

    递归下降分析算法:

     LL(1)分析算法:

     文法先去除左递归,再提取左公因子,求FIRST集,NULLABLE集,FOLLOW集

    FIRST集:

    把FIRST集推广到任意串上:

     

     如果LL(1)分析表存在冲突则该文法不属于LL(1)文法

    FIRST集的完整算法:

     一般计算LL(1)分析表注意:

     NULLABLE集:

     NULLABLE集计算过程:

     FOLLOW集的计算:

     求LL(1)分析表的过程:求FIRST集----->求NULLABLE集------->求FOLLOW集------->求FIRST_S集——>求LL(1)分析表(可能会得到冲突)

    构建LL(1)分析表:

    用LL(1)分析表进行LL(1)文法分析

    解决LL(1)分析表的冲突:

    1,消除左递归,变为右递归

     消除间接左递归:

                   

    2,提取左公因子。

     

     

    自底向上分析方法,也称移进-归约分析法(自顶向下最右推导的逆过程):

          

    分析步骤:

          

  • 相关阅读:
    git 使用
    使用Xcode 7 beta免费真机调试iOS应用程序
    Java类更改常量后编译不生效
    Spring AOP中pointcut expression表达式解析
    awk
    sed
    Servlet 单例多线程
    iOS 运行时添加属性和方法
    Lucene5学习之使用MMSeg4j分词器
    redis
  • 原文地址:https://www.cnblogs.com/lq13035130506/p/12048784.html
Copyright © 2020-2023  润新知