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

     

     

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

          

    分析步骤:

          

  • 相关阅读:
    微信Web开发者工具 移动调试 手机连接不上
    js 生成guid 自定义函数
    json
    c# 返回时间差
    Quartz.Net和队列应用demo
    数据库字段数字表示含义的枚举维护
    API文档自动生成,Swagger的配置
    请求资源文件报500错误
    文件上传三:base64文件上传
    文件上传二:FormData上传
  • 原文地址:https://www.cnblogs.com/lq13035130506/p/12048784.html
Copyright © 2011-2022 走看看