zoukankan      html  css  js  c++  java
  • 编译原理(二)语法分析

     

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

    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,提取左公因子。

     

     

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

          

    分析步骤:

          

  • 相关阅读:
    poi隐藏列
    凯西太太的果园
    java中不可变对象深入理解
    excel添加空白行的快捷键
    如何在多个页面中,引入一个公共组件
    对后端返回的数据进行适配
    我与时间管理的故事
    在前端团队的那些日子(初见)
    我是这样做时间管理的(下)
    我是这样做时间管理的(上)
  • 原文地址:https://www.cnblogs.com/lq13035130506/p/12048784.html
Copyright © 2011-2022 走看看