计算思维是运用计算机科学的基础概念去求解问题、设计系统和理解人类的行为,它包括 了一系列广泛的计算机科学的思维方法。
翻译程序是把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称为目标语 言程序)的程序。
编译程序是把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器 语言程序)的程序。
解释程序是把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序 本身。
词法分析器,又称扫描器,输入源程序,进行词法分析,输出单词符号。
语法分析器,简称分析器,对单词符号串进行语法分析,识别出各类语法单元,最终判断 输入串是否构成语法上正确的“程序”。
遍就是对源程序或源程序的中间表示从头到尾扫描一次,并作有关的加工处理,生成新的 中间结果或目标程序。
语法是指这样的一组规则,用它可以形成和产生一个合式的程序。
语义是指这样的一组规则,用它可以定义一个程序的意义。
所谓程序,本质上说是描述一定数据的处理过程。
作用域是指一个名字能被使用的区域范围。
文法是描述语言的语法结构的形式规则(即语法规则)。
标识符是指由字母或数字组成的以字母为开头的一个字符串。
αAβ 直接推出 αγβ,即aAβ => aγβ仅当A -> γ是一个产生式,且a,b∈(VT ∪ VN)* 。 如果,则我们称这个序列是从a1到an的一个推导。若存在一个从a1 到an的推导,则称a1可以推导出an 。
假定G是一个文法,S 是它的开始符号。如果,则a称是一个句型。仅含终结符号的句型是 一个句子。文法G所产生的句子的全体是一个语言,将它记为 L(G)。
最左推导:任何一步a Þ b都是对a中的最左非终结符进行替换。
最右推导:任何一步a Þ b都是对a中的最右非终结符进行替换。
用一张图表示一个句型的推导,称为语法树。
如果一个文法存在某个句子对应两颗不同的语法树,则说这个文法是二义的。
一个语言是二义性的,如果对它不存在无二义性的文法。
执行词法分析的程序称为词法分析器。
关键字是由程序语言定义的具有固定意义的标识符。
输入串一般是放在一个缓冲区中,这个缓冲区称输入缓冲区。
不包含任何字符的序列称为空字,记为ε。
∑*的子集U和V的连接(积)定义为UV={ ab | aÎU & bÎV } 。
令 V*=V0∪V1∪V2∪V3 … ∪ 称V*是V的闭包。
记 V+=V V* ,称V+是V的正规闭包 。
若两个正规式所表示的正规集相同,则称这两个正规式等价。
对于S*中的任何字a,若存在一条从初态到某一终态的道路,且这条路上所有弧上的标记 符连接成的字等于a,则称a为DFA M所识别(接收)。
确定有限自动机(DFA)M是一个五元式 M=(S, S, f, S0, F),其中:
非确定有限自动机(NFA) M是一个五元式M=(S, S, f, S0, F),其中:
对于任何两个有限自动机M和M’,如果L(M)=L(M’),则称M与 M’等价。
一个上下文无关文法 G是一个四元式G=(VT,VN,S,P),其中
当一个文法满足LL(1)条件时,我们就可以为它构造一个不带回溯的自上而下分析程序, 这个分析程序是由一组递归过程组成的,每个过程对应文法的一个非终结符。这样的一个分 析程序称为递归下降分析器。
令G是一个文法,S是文法的开始符号,假定是文法G的一个句型,如果有且 则β称是句型相对于非终结符A的短语。特别是,如果有,则称b是句型相对 于规则A->b的直接短语。
一个句型的最左直接短语称为该句型的句柄。
假定a是文法G的一个句子,我们称序列 是a的一个规范归约,如果 此序列满足:
在形式语言中,最右推导通常被称为规范推导。
由规范推导推出的句型称为规范句型 。
所谓算符优先分析法就是定义算符(终结符)之间的某种优先关系,借助于这种关系寻找 “可归约串”和进行归约。
一个文法,如果它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下形 式的产生式右部: …QR… 则我们称该文法为算符文法。
一个文法G的句型的素短语是指这样一个短语,它至少含有一个终结符,并且,除它自身 之外不再含任何更小的素短语。
最左素短语是指处于句型最左边的那个素短语。
对于一个文法,如果能够构造一张分析表,使得它的每个入口均是唯一确定的,则这个文 法就称为LR文法。
一个文法,如果能用一个每步顶多向前检查 k个输入符号的LR分析器进行分析,则这个文 法就称为LR(k)文法。
字的前缀是指字的任意首部,如字abc的前缀有,a,ab,abc。
活前缀是指规范句型的一个前缀,这种前缀不含句柄之后的任何符号。即,对于规范句型 ,β为句柄,如果,则符号串是的活前缀(必为终结符 串)。
假若一个文法G的拓广文法G’的活前缀识别自动机中的每个状态(项目集)不存在下述情况:
1) 既含移进项目又含归约项目,
2) 含有多个归约项目
则称G是一个LR(0)文法。
每个项目的一般形式是,这样的一个项目称为一个LR(k)项目。项目中的 称为它的向前搜索符串(或展望串)
属性文法(也称属性翻译文法)是在上下文无关文法的基础上,为每个文法符号(终结符 或非终结符)配备若干相关的“值”(称为属性)。这些属性代表与文法符号相关信息,如 类型、值、代码序列、符号表内容等。属性可以进行计算和传递。对于文法的每个产生式都配备 了一组属性的计算规则称为语义规则。
在语法树中,一个结点的继承属性由其父结点、其兄弟结点和其本身的某些属性确定。
在一棵语法树中的结点的继承属性和综合属性之间的相互依赖关系可以由依赖图(有向图) 来描述。
如果一属性文法不存在属性之间的循环依赖关系,那么称该文法为良定义的。
所谓语法制导翻译法,直观上说就是为文法中每个产生式配上一组语义规则,并且在语 法分析的同时执行这些语义规则。
一个属性文法称为L-属性文法,如果对于每个产生式,其每个语义规则中的每 个属性或者是综合属性,或者是的一个继承属性且这个继承属性仅依赖于:
(1) 产生式中Xj左边符号X1,X2,…,Xj-1的属性
(2) A的继承属性
一个表达式E的后缀形式可以如下定义:
1)如果E是一个变量或常量,则E的后缀式是E自身。
2)如果E是E1 op E2形式的表达式,其中 op是任何二元操作符,则 E的后缀式为E1’E2’op,其中E1’和E2’ 分别为E1 和E2的后缀式。
3)如果E是(E1)形式的表达式,则E1 的后缀式就是E的后缀式。
无循环有向图(Directed Acyclic Graph,简称DAG),对表达式中的每个子表达式,DAG中都 有一个结点,一个内部结点代表一个操作符,它的孩子代表操作数,在一个DAG中代表公 共子表达式的结点具有多个父结点。
代码生成是指把语法分析后或优化后的中间代码变换成目标代码。
绝对指令代码是指能够立即执行的机器语言代码,所有地址已经定位。
可重新定位指令代码是指待装配的机器语言模块,执行时,由连接装配程序把它们和某 些运行程序连接起来,转换成能执行的机器语言代码。 汇编指令代码是指尚须经过汇编程序汇编,转换成可执行的机器语言代码。
如果在一个基本块内,四元式i对A定值,四元式j要引用A值,而从i到j之间没有A的其 他定值,那么,我们称j是四元式i的变量A的待用信息。
一个过程的活动指的是该过程的一次执行 。
过程P一个活动的生存期,指的是从执行该过程体第一步操作到最后一步操作之间的操作 序,包括执行P时调用其它过程花费的时间。
动态链指向调用该过程前的最新活动记录地址的指针。
静态链指向静态直接外层最新活动记录地址的指针,用来访问非局部数据。
形式单元存放相应的实在参数的地址或值。
一个名字能被使用的区域范围称作这个名字的作用域。
为了管理过程在一次执行中所需要的信息,使用一个连续的存储块,我们把这样的一个连 续存储块称为活动记录。
如果在编译时就能够确定一个过程在运行时所需要的存储空间的大小,则在编译时就能够 安排好目标程序运行时的全部数据空间,并能确定每个数据项的单元地址。存储空间的这种 分配方法叫做静态分配。
优化是指对程序进行各种等价变换,使得从变换后的程序出发,能生成更有效的目标代码。 每个流图以基本块为结点 ,如果一个结点的基本块的入口语句是程序的第一条语句,则称 此结点为首结点 如果在某个执行顺序中,基本块B2紧接在基本块B1之后执行,则从B1到 B2有一条有向边。即,如果有一个条件或无条件转移语句从 B1的最后一条语句转移到B2的 第一条语句;或者在程序的序列中,B2紧接在B1的后面,并且B1的最后一条语句不是一个 无条件转移语句。我们就说B1是B2的前驱,B2是B1的后继 。
所谓基本块,是指程序中一顺序执行的语句序列,其中只有一个入口和一个出口,入口就 是其中的第一个语句,出口就是其中的最后一个语句。
局限于基本块范围内的优化称为基本块内的优化,或称局部优化。
描述计算过程的 DAG是一种带有下述标记或附加信息的DAG:
1. 图的叶结点以一标识符或常数作为标记,代表该变量或常数的值;
2. 图的内部结点以一运算符作为标记,表示该结点代表应用该运算符对其后继结点所代表 的值进行运算的结果;
3. 图中各个结点上可能附加一个或多个标识符(称附加标识符)表示这些变量具有该结点所 代表的值。
所谓变量A在某点d的定值到达另一点u(或称变量A的定值点d到达另一点u),是指 流图中从d有一通路到达u且该通路上没有A的其它定值。
循环不变运算是指对四元式A:=B op C,若B和C是常数,或者到达它们的B和C的定值点 都在循环外。
如果循环中对变量I只有唯一的形如I:=I±C的赋值,且其中C为循环不变量,则称I为循环 中的基本归纳变量。
如果I是循环中一基本归纳变量,J在循环中的定值总是可化归为 I的同一线性函数,也即 J=C1*I ± C2,其中C1和C2都是循环不变量,则称J是归纳变量,并称它与I同族。