软考之路(五)---编译原理 概念篇
从组成原理到编译原理,都是相互联系的,学习的知识都是在层层推进,顺利成章的,整个软考的所有的知识都可以从计算机的发展(组成原理)--->软件的开发(软件工程)--->软件的算法设计(数据结构)-->高级语言写的系统--->在计算机上识别(编译原理)--->各个系统的背后数据的支持--->(数据库)---->---网络知识的应用---->网络基础……,可以把整个所有的软考的课本给串起来,这些都是构成现在丰富世界的必不可少的条件。
当然由于机器语言由0、1组成,难以阅读。所以在机器语言的基础上开发了汇编语言。由于汇编语言还是很难使用,所以开发出高级语言。现在的高级语言编写的程序、系统都是在汇编语言的编译下由计算机认识翻译执行。
编译原理的执行过程
词法
由基本字符(a,b……)构成的符号(单词)书写的规则
核心:单词拼写是否正确
语法
由程序语言的基本符号组成程序中的各个语法成分的一组规则
核心:关注的是句子的结构
语义
按照语法构成的各个语法成分(句子)的含义,关注的句子的含义
核心:静态,在编译时期发现
动态,在运行时期发现
语用
设计语境,适不适合在这里使用。
文法的概念
描述语言的语法结构的形式规则称为文法。(组合成语言的规则)
基本形式:
α→β
终结符(a,b,c,…..))和非终结符(A,BC,D,….):
终结符具有原子性,不可再分。非终结符,可以再分。
非终结符(程序)->终结符(语句)
终结符不可以单独出现在α中;
文法G是一个四元组,可表示为G(VT,VN,S,P)
VT(terminal symbol)是一个非空有限集,每个元素称为终结符。
VN(nonterminal symbol)是一个非空有限集,每个元素称为非终结符,它是不能单独在左边的。
S是一个非终结符,称为开始符号;它至少要在一条产生式中作为左部出现。
P是一个产生式集合(有限)。
文法分类
0型文法(短语文法,能力相当于图灵机)
例:A→a,Aa→a,aA→a
自我理解:左边至少有一个大写字母,右边随意
1型文法(上下文有关文法)
例:A→a,A→ab,Aa→BAc(左边至少有一个大写字母,且左边的长度小于等于右边的长度)
注意:α→ε也满足1型文法。
自我理解:即产生式右边的字母个数必须大于等于左边的字母个数。
2型文法(上下文无关文法)----->语法分析检测
例:A→a,A→ab,A→BAc(在1型文法的前提下,左边必须都是大写字母)
自我理解:即产生式左边必须完全都是大写字母
3型文法(正规式)
自我理解:即所有产生式右边要么没有大写字母,如果有必须全部在小写字母右边或者全部在小写字母左边也就是要保持线性一致
例子1:A→a,A→aB,B→a,B→cB,符合。
判断三型文法的注意事项:
(1)个文法中要么符合左线性,要么符合右线性,两套规则不能同时出现在一个语法中
(2)一个产生式推出的非终结符只能有一个;如果是一个文法中,非终结符要么都在右边的右边,要么都在右边的左边。
自动机
NFA 不确定的有限状态自动机
DFA确定的有限状态自动机
二者的区别:
个人认为最大的区别在于NFA中有带空的产生式,而且每个符号可以有很多个产生式,但是DFA每个符号必须有的产生式个数就是字母表中有几个字母,每个状态的产生式个数只能是少于或者等于字母表中字母的个数。而且不能有带空的产生式
NDA--->DFA转化(下一遍可大家分享)
正规式:正规式是描述程序语言单词的表达式
① ε是一个正规式,它表示集合L(ε)={ε}。
② 若a是∑上的字符,则a是一个正规式,它所表示的正规集L(a)={a}。
③ 若正规式r和s分别表示正规集L(r)=L(s),则
(a)r|s是正规式,表示集合L(r)∪L(s);
(b)r·s是正规式,表示集合L(r)L(s);
(c)r*是正规式,表示集合(L(r))*;
(d)(r)是正规式,表示集合L(r)。
产生式与正规式的转换:
自我理解:这块结合咱们数学上的式子来理解就很好了。
总结
编译的文法,是一种标准,按照标准来的,我们只需遵循他们的规范标准即可。时间万物都有一定的规律,当然各个语言有它的规范标准,知识间的相互联系,使问题变得简单,变得熟悉,学习起来更加的有兴趣,更具有动力。
接下来常重点考点实例解析和大家分享……