编译原理用一句话来说就是,源程序生成目标代码的过程。编译原理听起很熟悉,因为我们每天写代码,
做系统,这些都离不开代码的编译,经过编译以后的程序就可以运行了。
编译原理简单总结了一下文法,词法分析,语法推导树,算符优先。这几部分都是贯穿在编译的过程中,
是编译过程中的一些规则和方法。
1、文法
文法指根据一些指定的规则来确定编程语言的语法,从而实现编译器的功能。
0型文法:α∈(VT∪VN) * 且至少含有一个非终结符,而β∈(VT∪VN) *
例子:A→a,Aa→a,aA→a(左边至少有一个大写字母)
1型文法:在0型文法的基础上,再满足右边长度大于等于左边
例子:A→ab,Aa→Bac
特例:α→ε
2型文法:在1型文法的基础上满足左边只有一个非终结符
例子:A→a,A→ab
3型文法:在2型文法的基础上满足右边只有一个终结符或者终结符与非终结符的结合
例子:A→a,A→aB,B→a,B→cB
这4种文法的关系为
2、词法分析
词法分析的任务是把构成源程序的字符串转换成单词符号序列。词法规则可用3型文法或正规表达式描述,
产生的集合成为正规集。而有限自动机能准确地识别正规集。
正规式是描述单词符号的工具,也算得上是一种规则吧。
有限自动机是描述程序设计语言中的单词的识别过程。
正规式与正规文法之间的转换,正规式是另一种形式的文法
文法与有限自动机的对应关系
首先要弄明白每个名词的含义,其次是这几者之间的转换关系帮助加深理解。
3、语法推导树与算符优先
语法树以图示化的形式把句子分解成各个组成部分来描述或分析句子的语法结构。语法推导树相比文法要
更为直观和完整。
算法优先分析法是定义算符之间的某种优先关系。
总结
上面这些知识主要涉及在编译程序的前两个阶段词法分析以及语法分析。词法分析是输入源程序,对构成
源程序的字符串进行扫描和分解,识别出一个个的单词;而语法分析是在词法分析的基础上,根据语言的语法
规则,把单词符号串分解成各类语法单位。最终表示成语法树。
即上面知识涉及到的编译过程是把源码中的单词找出来,然后把分散的单词按预先定义好的语法组装成有
意义的表达式,最终形成一个抽象的语法树的过程。
文法,有限自动机等这些名词有些抽象,还是需要多看看书,多总结总结加深理解。