• 编译原理随笔3(自上而下的语法分析-推导法)


    1、理论基础

    • 上下文无关文法
    • 下推自动机(PDA)

    2、语法分析方式

    • 自上而下分析(上-PDA栈顶,下-PDA栈底)
    • 自下而上分析
      • 优先分析
      • LR分析

    3、PDA

     PDA定义:

    • 用法:

      • 当输入串读完了,且下推栈为空; or 输入串读完了,且控制器到达某些终态

      •  原理解析(推导-匹配-回溯):

        • 下推栈里面放着S(非终结符如:S->Sb|c) ,输入带是具体的语句如a+b# ,将语句与下推栈中S的推导后的语句相比,如果相同,消掉,读头向后移一位,继续比较
        • 当下推栈为空,且输入带为空(读头到末尾)则匹配,结束。
        • 如果下推栈中栈顶元素已经回溯完所有可能状态,仍不能和输入带的读头位置相匹配,-》不匹配,报错,结束。

    4、带回溯的自上而下分析缺点

    1. 若文法存在左递归,会出现死循环
    2. 若产生式存在多个候选式,选择哪一个进行推导完全是盲目的。
    3. 回溯,时间&空间消耗大
    4. 若识别语句是错的,但是无法指出具体的错误。

    5、不带有回溯的自上而下分析算法

    1. 消除左递归(如:P->Pa):将左递归转换成右递归
    2. 消除回溯:
      1. 预测:根据读头下的符号,准确选择候选式。(求候选式的终结首符集)
     

      

     >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>我是分割线>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.

    1、预测分析程序

     核心步骤:

    1. 求First集合Follow集
    2. 构造预测分析表

    2、LL(1)文法

    • 若文法G的预测分析表M中不含有多重定义项,则称G为LL(1)文法
    • LL的含义从到右扫描输入串,采用最推导分析句子
    • LL(1)中的1 表示分析句子时需向前看一个输入符号(避免回溯)
    • LL(1)文法是上下文无关文法的一个子集

    3、递归下降分析方法

    缺点:

    1. 对文法要求高,必须是LL(1)文法
    2. 高深度的递归调用会影响语法分析效率,慢&占空间
  • 相关阅读:
    JVisualVM简介与内存泄漏实战分析
    高并发性能提升和超卖的解决方案
    ehcache应用场景及集群同步(RMI)
    一台机器配置多个tomcat的实践经验
    事务范围数据库读写分离失败
    基于spring的数据库读写分离
    Zookeeper linux下使用
    Zookeeper集群
    Dubbo入门实例(二)
    Zookeeper安装与启动
  • 原文地址:https://www.cnblogs.com/sqchao/p/11564206.html
Copyright © 2020-2023  润新知