高级语言及其语法描述
一.主要内容
一.定义
1、程序语言主要是由语法和语义两个方面定义。
2、任何语言程序都可以看作是一定字符集(称为字母表)上的一字符串(有限序列)。
3、单词符号是语言中具有独立意义的最基本结构。一般包括:各类型的常数,标识符,记本子,算符和界符等。
4、词法规则是指单词符号的形成规则。
5、语言的语法规则规定了如何从单词符号形成更大的结构(语法单位),换言之,语法规则是语法单位的形成规则。语法单位一般包括:表达式,语句,分程序,函数,过程和程序。
6、语言的语法规则和词法规则定义了程序的形式结构。
7、语言的语义是指这样的一组规则:使用它可以定义一个程序的意义。
8、大多数编译程序采用的基于属性文法的语义制导翻译方法。
9、程序设计语言:建立在有限字母集上的一个符号系统。
10、一个程序语言的基本功能是描述数据和对数据的运算。程序从本质上来说是描述一定数据的处理过程。
二.
高级语言基本特征
1.编译时是否需要类型检查:静态类型语言(c,c++,java)、动态类型语言(Python, Ruby,PHP)。
2.类型检查强弱:弱类型语言(C,C++,VB)、强类型语言(JAVA, C#)。
3.程序设计语言的一般特性:程序结构、数据类型与操作、语句、控制结构。
4.程序结构:支持过程的嵌套定义(Pascal)、不支持过程的嵌套定义(c/c++/java)。
5.数据类型·;基本数据类型(int,char,float,double)、构造数据类型(指针,静态数组,动态数组)、自定义数据类型(栈,队列,字符串,结构体)。
6.一个数据类型通常包括以下三种要素:a.用于区别这种类型的数据对象的属性、b.这种类型的数据对象可以具有的值、c.可以作用于这种类型数据对象的操作。
7.表达式:
表达式的形式(前缀,中缀,后缀)、表达式中的运算符(算数,关系,逻辑;优先级,结合性)、运算符的代数性质(交换律,结合律等等)。
组成:操作数和操作符组成。
常见的算术表示形式:前缀式: +a*bc、中缀式:a+b*c、后缀式:abc*+
语句:说明性语句、执行性语句(赋值语句、控制语句、输入/输出语句)
三.语法
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
三.总结
编译原理已经上了好几节课了,是一门很难的课,这章节主要学了程序的语言及其定义,高级语言的一般特性,程序语言的语法描述,每个知识点都很难理解,对于我而言还是需要下功夫去学的,在今后的学习过程中要多下功夫,多学习。