高级语言及其语法描述
程序语言的定义
程序语言:
- 语法
- 语义
语法
语言程序:
一定字符集上的字符串。
语法:
一组规则,用它可以形成和产生一个合式(形式上正确的)程序。
词法规则:
单词符号形成规则(常数、标志符、基本字、算符、界符)
语法规则:
语法单位形成规则(表达式、语句、分程序、函数、过程等)
如字符串:0.5*x+c组成表达式,其中,常数 0.5,标识符 x,c,算符 *,+称为语言的单词符号。表达式0.5*x+c称为语言的一个语法范畴,或语法单位。
- 语言的单词符号由词法规则确定,单词符号是语言中具有独立意义的最基本结构。
- 一个程序语言只使用有限字符集作为字母表。
词法分析工具:正规式
语法分析工具:上下文无关文法
语义
语义:
一组规则,用它可以定义一个程序的意义。
程序语言基本功能:
描述数据和对数据的运算。
高级语言的一般特性
高级语言分类
- 强制式语言(过程式语言):命令驱动,面向语句程序由一系列语句组成,每个语句的执行引起若干存储单元值的改变。如:Fortran,C,Pascal等。
- 应用式语言(函数式语言):注重程序表示的功能(嵌套式)函数n(…函数2(函数1(数据))…)。如:Lisp。
- 基于规则的语言(逻辑程序设计语言):检查条件,满足值则执行相应动作。 如:Prolog。
- 面向对象语言(Object-Oriented Language):封装性、继承性、多态性。如:Java、C++。
程序结构
数据类型与操作
数据类型三要素:
属性、值、操作
1.初等数据类型
①数值数据:如整数、实数…,可执行+、-、*、/等
②逻辑数据: 可执行and、or、not等
③字符数据
④指针类型数据
标识符:
用字母或数字组成的以字母为开头的一个字符串。
区分:
- 标识符:无意义的字符序列
- 名字: 有明确意义及属性。
名字的属性
- 类型:决定值及在计算机内表示方式以及可作的运算
- 作用域:规定值的存在范围
2.数据结构
①数组:由同一类型数据所组成的某种n维矩形结构。A[i1,i2,…,in]
- 确定数组:所需存储空间在编译时已经确定
- 可变数组
编译时,碰到数组说明必须将数组有关信息放入一个“内情向量”中。
内情向量:
维数、各维上下限、首地址、数组(元素)的类型等。
②记录
记录结构:
由已知类型数据组合起来的一种结构。
一个记录结构含有若干分量,每个分量称为记录的一个栏(域,field),有确定数据类型。
③字符串、表格、栈、队列
3.抽象数据类型:
- 数据对象的一个集合
- 抽象运算的一个集合
- 类型对象的封装
语句与控制结构
1.表达式:操作数+算符
表达式形成规则:
①变量(包括下标变量)、常数是表达式
②若E1,E2为表达式,θ为二元运算符,则E1θE2为表达式
③若E为表达式,θ为一元运算符,则θE 或 Eθ为表达式
2.语句
执行性语句:描述动作
说明性语句:定义变量或运算
①赋值句:A:=B B的值送入A所代表的单元
②控制语句:如goto L, if B then S1 else S2
③说明语句
④简单句和复合句
简单句: 不包含其他成分的基本句。如赋值句,goto句等。
文法的直观理解
程序语言的语法描述
字母表和字符串
- 字母表——字符的有穷序列。Σ
- 符号——字母表中的每个元素。
- 符号串——字母表中符号构成的一个有穷序列。
空字(空串):
不含任何符号的序列。ε
Σ*:
Σ上所有符号串的全体。
如:Σ={a,b}, Σ*={ε,a,b,aa,ab,ba,bb,aaa,……}
∅ :不含任何元素的空集。{ }
符号串运算
- 符号串长度:α=abc |α|=3 |ε|=0
- 符号串连接:α=ab β=cd αβ=abcd
- 符号串集合的(连接)积:U,V, UV={αβ|α∈U & β∈V }, εA = Aε=A(注意:一般UV≠VU,但(UV)W=U(VW))
- 符号串幂运算:α, α0 =ε, α1=α,…, αn = αn-1 •α
- 集合闭包,正闭包:V*称为V的闭包。
V+=VV* 是V的正则闭包
Σ* = Σ0 ∪Σ1∪Σ2∪……={ε,……}
Σ+ =Σ1∪Σ2∪……
Σ* = Σ+ ∪ Σ0
Σ+ = Σ•Σ* = Σ*•Σ
如:Σ={a,b}, Σ* = {ε,a,b,ab,ba,…},Σ+ ={a,b,ab,ba,…}
上下文无关文法
文法:
描述语言的语法结构的形式规则(即:语法规则)
上下文无关文法G的组成:
一组终结符,一组非终结符,一个开始符,一组产生式。
- 终结符:组成语言的基本符号,是一个语言不可再分的基本符号。
- 非终结符(语法变量)
- 开始符
- 产生式(产生规则或规则):A→α,其中A为一符号,α为一符号串
文法为规则非空有穷集合,记为G。
形式上:上下文无关文法G={VT,VN,S,Р},其中:
VT——非空有限集,它的每个元素为终结符号。
VN——非空有限集,它的每个元素为非终结符号。
S —— 一个非终结符号,成为开始符号
Р——产生式集合(有限),每个产生式形式为A→α,A∈ VN ,α∈ (VN∪VT)*,S至少必须在某个产生式左部出现一次。
- 用大写字母A,B,C……代表非终结符
- 用小写字母a,b,c……代表终结符
- 用α,β,γ,……代表由终结符和非终结符组成的字符串。
如:G=(VN,VT,S,Р) VN={Z}, VT={0,1}, S=Z, Р={Z→0Z|01}
直接推出(推导):
最左推导:
任何一步αβ都是对α中最左非终结符进行替换。
最右推导:
任何一步αβ都是对α中最右非终结符进行替换。
文法G:S是它的开始符,若Sα则称α是一个句型,仅含终结符的句型是一个句子。
文法和语言的关系
若L(G1)=L(G2)则称文法G1和G2是等价的。
语法分析树与二义性
文法的二义性:
在文法所定义所有的句子中,若存在一个句子有两棵或两棵以上不同的语法树,此文法为二义的.
文法与语言的分类
- 1型文法也称为上下文有关文法:
被线性界限自动机(LBA)接受 - 2型文法也称为上下文无关文法:
被下推自动机接受 - 3型文法也称为正规文法:
被有穷自动机(FA)接受