概念题(不考

可能会考到

必考知识点

除了上述显示的左递归之外,还存在着隐式的左递归,对应于如果从A1推导到A2,那么绘制其对应的图中,节点A1和A2之间存在着一条有向边.

消除隐含左递归的方法就是:

  1. 给定一个非终结符号的排序,例如A1,A2 ... 
  2. 保证每个推导公式中右侧的A_i的对应位置在左侧A_j的右侧.也就是必须从排序较小着推导到排序较大者.
  3. 对满足第2条的,且包含了左递归的进行左递归消除.

如果想要使产生的产生式最少,那么:

如果从开始符号获取到的值依次是A1,A2,…An,

那么排序时最好是按照这个顺序的逆序进行排列,即An,…,A2,A1

????

  • 运行时空间组织

    • 实参传递给形参

      • 地址(变量传递地址,常数/表达式创建临时单元,传递临时单元的地址
      • 传值(将值拿出来,放进被调用过程的形式单元中,使用时类似于使用局部变量
      • 传名字
    • 函数值的返回

      • 将某个函数值保留在某个累加器中

      • /传递结果?

        形参对应两个单元,实参地址+实参值.使用形式参数,对应使用第二个单元;

    • 活动记录的内容

      • 链接数据(返回地址/动态链/静态链)
      • 形式单元(形式单元个数与内容)
      • 局部数据区(局部变量/内情向量,即数组有关信息/临时工作单元)
    • 嵌套过程语言的栈式实现

      • 从下到上,内容依次是:

        动态链(老SP),返回地址,静态链,形参个数,形参单元,局部变量,内情向量,临时单元

      • 如果使用了嵌套层次显示表,其内容应该是:

        动态链,返回地址,全局Display,形参个数,形参单元,display表,局部变量,内情向量,临时单元

    • 堆式内存分配

      分配策略:

      • 首次满足法
      • 最优满足法
      • 最差满足法
  • 静态链和动态链

    这里主要是关于静态链内容的确定方式:

    静态链内容填写分为三种情况:

    • 第N层调用第N+1层,也就相当于父亲节点调用孩子节点

      第N+1层的静态链填写调用过程 ( 第 N层过程 ) 的最新活动记录的起始地址 .也就相当于被调用者的静态链=调用者的SP

    • 第N层调用第N层,相当于兄弟节点调用其对应的兄弟节点

      被调用者的静态链内容填写为 调用过程 ( 第 N层过程 ) 的静态链的值。也就是被调用者静态链=调用者的静态链.

    • 第N层调用第N-X层

      相当于第某一个后代节点调用其祖先节点.

      被调用者的静态链填写需要沿着调用者的静态链跳转X次到达的活动记录的静态链内容,即被调用者的静态链内容.

综合题

词法分析

LL(1)文法

LR分析

翻译

DAG优化

例题

第二章

第七章优先级

image-20220617102749876

第七章说明

image-20220617103328274 image-20220617103349846 image-20220617103601530 image-20220617103633347