OS:操作系统,定义为系统性的操作集合。有更准确的数学形式化的定义。既然定义为OS,便引入了类似于环境科学或者生物学中"生命周期"思想。
编译器: 把高级语言转化为计算机可执行机器语言(冯诺依曼-图灵机 二进制语言 或丹佛数据-指令语言)的系统软件。
在计算机诸多课程里,离散数学可以称为是计算机理论的基础。私以为,偏工程学而非形式化系统数学的科目,编译原理貌似是最难的一个课程。
像华为这样的企业,或许应该有更大的理想,不必放下身段和诸多小公司抢饭吃。对于编译器以及系统的开发,需要长久的支持更新,35岁优化掉或者转为技术管理离开工程前沿,又或者因为财富自由而离开放弃自己的长处,对于计算机事业而不是公司来说,是一件得不偿失的事情。
或许,一切根源,和"债务经济"这种发展方式有关。凯恩斯经济理论不坏,但有更好的分配机制或许对计算机科学工程学发展更好。
一、语言学
语言的基础:字母表、词法、文法、语义
形式化的定义:
二、形式文法-四种形式文法-chomsky文法
0型文法-图灵机
设 G = ( V N , V T , P , S ) G=(V_N,V_T,P,S) G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈( V N V_N VN∪ V T V_T VT)*且至少含有一个非终结符,而 β∈( V N V_N VN∪ V T V_T VT)*则G是一个0型文法。0型文法也称短语文法。
一个非常重要的理论结果是:0型文法的能力相当于图灵机(Turing)。或者说,任 何0型文语言都是递归可枚举的,反之,递归可枚举集必定是一个0型语言。0型文法是这几类文法中,限制最少的一个,所以我们在试题中见到的,至少是0型文法。
上下文有关-1型文法
线性有界自动机。它是在0型文法的基础上每一个α→β,都有|β|>=|α|。这里的|β|表示的是β的长度。
注意:虽然要求|β|>=|α|,但有一特例:α→ε也满足1型文法
如有A->Ba则|β|=2,|α|=1符合1型文法要求。反之,如aA->a,则不符合1型文法
上下文无关-2型文法
非确定下推自动机,产生形式如:A →β
其中:A∈VN;β∈(VT∪VN)*
有限自动机-3型文法-正规文法
产生式形如:A → αB 或 A → α
其中:α ∈ VT*;A,B ∈ VN(右线性文法)
产生式形如:A → Bα 或 A → α
其中:α ∈ VT*;A,B ∈ VN(左线性文法)
左线性文法与右线性文法的描述能力是等价的。
文法分析:波兰式和逆波兰式
三、语法树
自顶向上的语法分析:LL(1)型文法树
自底向下的语法分析:LR分析法
四、语义分析
中间代码生成;
属性文法;
语法制导翻译;
五、编译器优化
四级优化方法
六、yacc和lex
编译器滚雪球