最近由于要评职称,准备参加软件设计师的考试,为了更好的记忆,也为了方便查阅,把复习的过程记录下来。具体的内容就不按顺序写,按照本人的薄弱环节来展开。
1,编译程序和解释程序的区别
编译程序:定义(直接执行源程序,或翻译成中间代码后执行),在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序不参与目标程序的执行。生成独立的目标程序。如.java生成.class.
解释程序:定义(源程序翻译成目标程序,然后执行)在解释方式下,源程序和解释程序参与到程序的运行。程序的控制权在解释程序。如asp.Python
另外汇编程序(三类):指令语句,伪指令,宏。汇编程序工作通常要对源程序进行两次扫描才能完成。第一次扫描主要工作是定义符号的值。第二次扫描的目的则是产生目标程序。
2,几种高级语言
Fortran(科学计算),Algol60(分程序结构),Cobol(事务处理),Pascal(结构化程序设计),Prolog(逻辑型语言),LISP(函数型程序)
3,编译过程
过程阶段 | 任务及其特点 |
词法分析阶段 | 该阶段的任务是从左到右逐个字符的读入源程序,识别出一个个的单词符号。 词法分析所依据的是语言的词法规则,即描述单词结构的规则。词法规则可用3型文法(正规文法)或正规式来描述,有限自动机能识别正规文法所定义的语言和正规式所表示的集合。 |
语法分析阶段 | 该阶段任务是在词法分析的基础上将单词符号序列分解成各类语法单元。 语法分析所依据的是语言的语法规则,即描述程序结构的规则。语法分析有自顶向下分析(递归子程序分析法LL1,必须改写文法,采用预测分析法,要消除左递归和提取公共左因)和自底向上分析(LR和算符优先分析,后进先出栈)两大类。 |
语义分析阶段 | 审查源程序有无语义错误,为代码生成阶段收集类型信息。 |
中间代码生成阶段 | 在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。所谓“中间代码”是一种简单、含义明确的记号系统。 |
代码优化阶段 | 该阶段是对前阶段产生的中间代码进行变换改造,目的是使生成的目标代码更为高级,即省时间和省空间。优化所依据的原则是程序的等价变换规则。 |
目标代码生成阶段 | 此阶段使把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。 |
4,文法及语言形式描述
文法的定义:描述语言的语法结构的形式规则称为文法。
文法G是一个四元组,可表示为G(VN,VT,P, S)。
VT是一个非空有限集,每个元素称为终结符。
VN是一个非空有限集,每个元素称为非终结符。
S是一个非终结符,称为开始符号;它至少要在一条产生式中作为左部出现。
T是一个产生式集合(有限)。主要涉及几个概念。
I. 直接推导与推导(区别是否直接导出)
II. 直接归约与归约(直接推导和推导的逆过程)
III. 句型和句子(由开始符号推导出的称为句型,仅含终结符的句型称为句子)
IV. 语言(句子的全体)
文法的分类:
文法类型 | 文法名称 | 语言名称 | 对应的自动机 | 定义 |
0型(PSG) | 短语文法 | 递归可枚举语言 | 图灵机(Turing) | Vn中a至少含有一个非终结符 |
1型(CSG) | 上下文有关文法 | 上下文有关语言 | 线性界限自动机 | |a|<=|b| |
2型(CFG) | 上下文无关文法 | 上下文无关语言 | 非确定下推自动机 | a都为非终结符 |
3型 | 右线性文法(正规文法) | 有限状态文法 | 有限状态自动机 | 满足左线性或右线性规则 |
5,词法分析
分为确定的有限自动机(DFA)和不确定的有限自动机(NFA).
DFA定义为(S,Σ,f,s0,z)
S为一个有限集,每个元素为一个状态。
Σ为输入字符。
f 为单值部分映像
S0开始状态。
z 非空的终态集合。
NFA也是一个五元组。不过f的后继状态是不确定的,有向弧的标记可以是的ε。与DFA最根本的区别是,S在DFA只是一个状态,而NFA中为一个开始状态集。
NFA转化在DFA?
上图转化为一个表格
I | I0 | I1 |
{S,1,2,3} | {1,3,4,5,z} | {2,3} |
{1,3,4,5,z} | {1,3,4,5,6,z} | ε |
{2,3} | {4,5,z} | {2,3} |
{1,3,4,5,6,z} | {1,3,4,5,6,z} | {5,z} |
{4,5,z} | {6} | ε |
{6} | ε | {5,z} |
{5,z} | {6} | ε |
正则式与有限自动机的转换
定义:
6,语法分析
语法分析的任务是识别由词法分析给出的单词符号序列是否为给定文法的正确句子(程序)。语法规则可以采用上下文无关方法进行描述,
上下文无关文法,语法推导树:
语法分析常用的方法有两类:
◆自底向上分析方法(LR分析法和算符优先分析法)
也称为移进-归约分析法。对“可归约串”刻画的不同,形成两种不同的分析方法,即规范归约分析法和算符优先分析法。
◆自顶向下分析方法
也称为面向目标的分析方法。存在两种分析方法,递归子程序法和预测分析法,都使用LL(1)文法来进行语法分析。
算符优先:
文法优先级:
例子:
fristvt,fastvt如下:
结果如下:
最后填表。
参考:
1,软设教程(第三修订版)
2,中国软考联盟
3,希赛视频