高级语言及其语法描述


程序语言的定义

程序语言:

  • 语法
  • 语义

语法

语言程序:

一定字符集上的字符串。

语法:

一组规则,用它可以形成和产生一个合式(形式上正确的)程序。

词法规则:

单词符号形成规则(常数、标志符、基本字、算符、界符)

语法规则:

语法单位形成规则(表达式、语句、分程序、函数、过程等)

如字符串: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++。

程序结构

编译原理(2)

编译原理(2)

数据类型与操作

数据类型三要素:

属性、值、操作

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句等。

文法的直观理解
编译原理(2)

程序语言的语法描述

字母表和字符串

  • 字母表——字符的有穷序列。Σ
  • 符号——字母表中的每个元素。
  • 符号串——字母表中符号构成的一个有穷序列。

空字(空串):

不含任何符号的序列。ε

Σ*:

Σ上所有符号串的全体。

如:Σ={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}

直接推出(推导):
编译原理(2)
最左推导:

任何一步αβ都是对α中最左非终结符进行替换。

最右推导:

任何一步αβ都是对α中最右非终结符进行替换。

编译原理(2)

文法G:S是它的开始符,若Sα则称α是一个句型,仅含终结符的句型是一个句子。
编译原理(2)
文法和语言的关系
编译原理(2)

若L(G1)=L(G2)则称文法G1和G2是等价的。

语法分析树与二义性

编译原理(2)

文法的二义性:

在文法所定义所有的句子中,若存在一个句子有两棵或两棵以上不同的语法树,此文法为二义的.

编译原理(2)
编译原理(2)

文法与语言的分类

  • 1型文法也称为上下文有关文法:被线性界限自动机(LBA)接受
  • 2型文法也称为上下文无关文法:被下推自动机接受
  • 3型文法也称为正规文法:被有穷自动机(FA)接受

相关文章: