一、程序语言的定义
语法:一组规则,用这组规则可以产生形式上正确的程序
词法规则:合法单词的构成规则,也就是如何从字母表中选择字符构成一个合法单词(用有限状态自动机或正规式描述)。
语法规则:合法程序的构成规则,也就是如何把各个单词符号组成更大的语法单位(语句、程序)(用上下文无关文法进行描述)
世界上已有上千种高级语言
例如:
FORTRAN:面向科学计算
COBAL:面向事务处理
PROLOG,LISP,python等:人工智能
Ada:大型嵌入式实时处理
SNOBAL:符号处理
C++,C:通用
任何语言实现的基础是语言的定义。
在定义方面,编译程序研制者与一般用户有所不同
用户关心语言如何使用
开发人员关心文法的定义。他们对哪些构造允许出现更感兴趣。
程序语言主要由语法和语义两方面定义。
二 高级语言的一般特征
1、高级语言的分类
(1)、语言范畴:强制式语言(FORTRAN、C)、应用式语言(LISP、ML)、基于规则的语言(Prolog)、面向对象语言(Java)
(2)、编译时是否需要类型检查:静态类型语言(C/C++、Java)、动态类型语言(Python、PHP)
(3)、类型检查强弱:弱类型、强类型
(4)、是否支持过程的嵌套定义:支持(Pascal)、不支持(C/C++、Java)
2、数据类型
基本数据类型(int,double...)
构造数据类型(数组、指针...)
自定义数据类型(栈、队列、字符串...)
三.语法
1、设∑是一个有穷字母表,它的每个元素称为一个符号。∑上的一个符号串是指由∑中的符号所构成的一个有穷序列。不包含任何符号的序列称为空字,记为ε。用∑*表示∑上的所有符号串的全体,包括ε。φ表示不含任何元素的空集。
2、集合V自身的n次(连接)积记为:Vⁿ=VV...V;规定Vº={ε}。令V*=Vº∪V¹∪V²...Vⁿ,称为V的闭包。
记V﹢=VV*,称为V的正则闭包。
3、上下文无关文法G
(1)、G定义:它所定义的语法范畴(语法单位)是完全独立于这种范畴可能出现的环境的。
(2)、G包括四个组成部分:一组终结符号(VT),一组非终结符号(VN),一个开始符号(S),一组产生式(P)。
VT:一般用小写字母或阿拉伯数字表示,非空有限集
VN:一般用大写字母表示,非空有限集 VN∩VT=φ
S:非终结符号
P:产生式集合(有限),形式:P—>a,P∈VN,a∈(VT∪VN)*。S必须在某个产生式的左部出现一次。
(3)、假定G是一个文法,S是它的开始符号。如果S=>a,则称a是一个句型。仅含终结符的句型是一个句子。文法G所产生的句子的全体是一个语言,将它记为L(G)。
L(G)={ a | S=+>a&a∈VT* }。
二.应用
6、(1) L ( G6 ) 是0到9 组成的数字串.
(2)最左推导: N =>ND =>NDD =>NDDD =>DDDD =>0DDD =>01DD=>012D=>0127
N =>ND =>DD =>3D=>34
N =>ND =>NDD =>DDD =>5DD =>56D =>568
最右推导: N =>ND =>N7=>ND7=> N27=> ND27=> N127=> D127=>0127
N =>ND =>N4=>D4=> 34
N =>ND =>N8=>ND8=> N68=>D68=>568
7. G( S ) S->J | AJ J->1 |3| 5| 7| 9 O->2 |4 |6 |8 | J T->0 | O A->AT | O
8.
i + i + i i + i * i
总结 : 很高兴这个学期能够学习编译原理这门课,我很喜欢,但是比较难,目前还是 处于啥都不会的状态,不过我会好好学习的,争取早日跟上大家的步伐