编译原理自上而下分析?

1.2.1 编译程序各阶段的工作都涉及到___。(陕西省1999年自考题)

1.2.2下列各项中,____与数组元素的地址有关。(陕西省1999年自考题)

a.数组第一个元素的存储地址

1.2.3 编译程序工作时,通常有__阶段。(陕西省1998年自考题)

1.2.4 过程调用的参数传递方式有__。

1.2.5 编译过程中所遵循的规则有____。

1.3.1 解释程序和编译程序的区别在于_。

1.3.2 编译过程通常可分为5个阶段,分别是_、语法分析、_、代码优化和目

标代码生成。(陕西省1999年自考题)

1.3.3 编译程序工作过程中,第一阶段输入是_,最后阶段的输出为一程序。

(陕西省1997年自考题)1.3.4 静态数组元素地址的计算公式由两部分确定,一部分是_,它在_时确定;

另一部分是_,它在_时确定。

1.3.5 把语法范畴翻译成中间代码所依据的是语言的_。(陕西省2000年自考题)

1.3.6 目标代码可以是_指令代码或_指令代码或绝对机器指令代码。

(陕西省2000年自考题)1.3.7 编译程序是指能将____程序翻译成____程序的程序。

1.3.8 数组元素的地址由___和___组成,其中_中的a和c在翻译数组说明语句时填入到数组的_中。

1.3.10 词法分析所遵循的是语言的______,而中间代码生成所遵循的是语言的_____。

(陕西省1997年自考题)1.3.11 数组元素的地址计算与数组的_____数及____方式有关,也与数组的类型及机器对存储器的编址方式有关。(陕西省2000年自考题)

}

对于输入序列,进行左推导,得到一个合法句子或者非法结构,是一种试探+回溯的方法,自上而下建立输入序列的分析树。

  1. 公共左因子,造成大量回溯。
方法:首先,整理A产生式为如下形式:
 其中αi非空,βj均不以A开始。用下述产生式代替A产生式
 若αi为空,则形成一个有环的A产生式

核心思想:将不是直接左递归的符号右部展开到其他产生式

关键步骤:合理排序非终结符:A1,A2,...,An;
 消除Ai产生式中的直接左递归;
  • 提取左因子(类似于有限自动机的确定化)
方法 重复过程,直到所有A产生式候选项中不再有公共前缀:

注意:既有左递归,又含左因子,先消除左递归(左递归可以看作左因子的一部分)。

限制:文法不能有左递归和公共左因子,必须先消除。

  1. 将转换图转化为EBNF表示。
  2. 从EBNF构造子程序。

1. 构造状态转换图并化简

    • 为每个非终结符A建立对应的状态转换图,也就是初态到终态的路径。
  1. 标记为A的边课等价为标记ε的边转向A转换图的初态;
  2. 可以合并:ε连接的两个状态(FA的确定化思想),标记相同的路径,不可区分的状态(DFA的最小化)
    • ():用于改变优先级。

3.构造递归下降子程序
每一行是一个完整的执行语句。

  • 多类匹配,包含或的程序。

核心:预测分析表+驱动器(模拟算法),预测分析表的构建。
LL,符号栈,输入记号流。

  1. 如果已知当前栈顶是非终结符,下一输入终结符,预测分析表指示了下一步动作。
  2. 从初始状态到分析成功或者出错。一个状态(PPT中写作格局)是三元组(栈内容,剩余输入,改变格局的动作)。
    1. 匹配终结符,则前往下一个。
    2. 展开非终结符,逆序放入符号栈。
    3. 成功:栈顶和剩余输入都是#。
    4. 出错:调用错误恢复例程。
  1. 驱动器算法(非递归的预测分析)
  2. 用预测分析器分析句子(及一个三元组(栈,剩余输入,动作)的顺序表示。

关键:构造预测分析表。

  1. 构造fIRST集合与FOLLOW集合,对于每个非终结符而言。
  2. 根据两个集合构造预测分析表。

通俗理解:FIRST(e)集合就是从e开始可导出的文法序列的开头终结符。Follow(e)集合就是从开始符号可导出的所有含e的文法序列中e之后的终结符。

求这两个集合的算法,需要来理解,first往后多步查看,follow复杂一点。

FIRST集合自下而上计算,FOLLOW集合自上而下计算。

1. 加入#到FOLLOW(S),其中S是开始符号,#是输入结束标记
对3的理解:因为 ε∈FIRST(β),B成为A产生式最右的文法符号,
反之不然,因为FIRST(β)不一定只有 ε。
}

我要回帖

更多关于 基本分析中自上而下的分析流程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信