【编译原理】高级语言及其语法描述

高级语言及其语法描述



程序语言的定义

20世纪50年代,语言学家Noam Chomsky(乔姆斯基)提出了一个用来描述语言的数学系统,把用一组数学符号和规则来描述语言的方式叫做形式描述,而把能用数学符号和规则描述的语言称为形式语言。
形式化就是不关注符号本身含义,只关注符号之间的推导关系。
形式描述:用一种数学符号和规则来描述语言的方式。
形式语言:把用来描述语言的数学符号和规则称为形式语言。
这种理论对程序设计语言的设计和编译程序的构造有着重大的作用。程序设计语言就是形式语言。

语法

任何语言程序都可以看作是一定字符集(称为字母表)上的一字符串(有限序列)。
所谓一个语言的语法是指这样一组规则,用它可以形成和产生一个合式的程序。这些规则的一部分被称为词法规则,另一部分被称为语法规则(或产生规则)。

  1. 词法规则:单词符号的形成规则。也就是规定了字母表中哪些字符串是一个单词符号。
    理论基础:正规式和有限自动机理论
  2. 语法规则:是语法单位的形成规则。也就是规定了如何从单词符号形成更大的语法单位。
    理论基础:上下文无关文法和有限自动机

语义

所谓一个语言的语义是指这样一组规则,使用它可以定义一个程序的意义。这些规则称为语义规则。
语义:可以定义程序意义的规则。语言离开语义就只是一堆符号的集合。
理论基础:语法制导翻译方法

程序语言的语法描述

基本概念

字母表:字母表Σ是有穷符号元素的非空集合。也可称为“符号集”。
符号:字母表中的元素。典型的符号有字母、数字、各种标点符号和各种运算符。
符号串:字母表中的符号所组成的任意有穷序列。注意:符号串中的符号与顺序有关(01 和 10 不同的符号串)。
空符号串:不含任何符号的符号串, 用 ε 表示。

例如,集合{a,b,c,+,*}是一个含有5个符号的字母表,而字母表{0,1}只有2个符号。
例如,有字母表{a,b,c,+,},则a,b,c,+,,aa,ab,ac,a+,a*,ba,bb,bc,b+,b*,aaa,bbb等等都是该字母表上的符号串。
而所有二进制数都是定义在字母表{0,1}上的符号串。
显然,一个字母表上的全部符号串所组成的集合是无穷的。

符号串的长度:指符号串x中所含符号的个数,记为|x|。 如:|abc|=3,|abc+*abc|=8,|ε|=0
符号串的前缀:指从符号串x的末尾删除0或多个符号后得到的符号串,如ε 、 a、ab、abc都是abc的前缀。
符号串的后缀:指从符号串x的开头删除0或多个符号后得到的符号串,如ε 、 c、bc、abc都是abc的后缀。
符号串的子串:指从符号串x的开头和末尾删除0或多个符号后得到的符号串,如abc的子串为ε 、 a 、b 、c 、ab 、bc 、abc。 符号串的前缀、后缀都是它的子串。

符号串的运算

符号串的连接:若x、y是两个符号串,则xy表示连接,是将符号串y连接在符号串x的后面。若x、y是字母表∑上的两个符号串,则xy也是字母表∑上的符号串。 如: x=ab,y=ba,那么 xy=abba。

注意:
连接没有交换律,即 xy ≠ yx
对于空串ε有 εx=x ε=x

符号串的方幂:一个符号串x与其自身的n-1次连接称为x的n次方幂,即:x0=ε, x1=x , x2=xx ,…,xn=xx…x=xxn-1=xn-1x。如:x=abc, x0= ε, x1=abc, x2=abcabc,…。

符号串集合的运算

特别定义:
空符号串:ε,表示不含任何符号的符号串
空符号集合:{ε},集合里面有一个元素为ε
空集合:φ={ },集合里面是空的
注意:
εx = xε
{ε}A=A{ε}=A
Aφ= φA= φ

符号串集合的乘积:令A、B为两个符号串集合,A和B的乘积AB定义为:
AB={xy|x∈ A ,y ∈ B}(笛卡儿乘积)。
例如:A={a,b} B={c,d},则AB={ac,ad,bc,bd}
对于{ε}有: {ε}A=A {ε}=A

符号串集合的方幂:设A为符号串集合,则A的方幂定义为:
A0={ε},A1=A,A2=AA…… An=AA…A=AAn-1 =An-1A
例如:A={a,b,c}
A0={ε}
A1=={a,b,c}
A2=AA={aa ,ab ,ac ,ba ,bb ,bc ,ca ,cb ,cc}……

符号串集合的闭包:设A为一个集合,则集合A的正闭包用A+表示,定义为:
A+ =A1∪A2∪….∪An∪…= i=1Ai
集合A的闭包用A*表示,定义为:
A*=A0∪A+={ε}∪A+
例如:A =={a,b ,c},则
A+ ={a,b,c,aa,ab,ac,ba,bb,bc,ca,cb,cc,aaa,aab,…}
A* ={ε,a,b,c,aa,ab,ac,ba,bb,bc,ca,cb,cc,aaa,aab,…}
可见,字母表A的正闭包A+就是由A中字母所构成的一切符号串的集合,而A*仅比A+多个ε。

文法和语言的形式定义

从“产生语言”的角度出发,给出方法和语言的形式定义。
产生语言:指制定出有限个规则,借助这些规则可以产生此语言的全部句子。
在学习英语时,我们知道句子由主语、谓语组成,主语由冠词、形容词及名词组成等等,这就是说明句子组成的规则。而在形式语言里,这种规则可采用“<句子>::=<主语><谓语>”、“<主语>::=<冠词><形容词><名词>”这种形式来表示。分析一个句子是否正确,就是根据这些规则进行的。实际上,文法就是描述语言语法结构的形式规则(即语法规则)。

基本相关概念

文法(Grammar):是描述语言的语法结构的形式规则。
语法树(Parse Tree):句子结构的图形表示方式。类似下图:
这里写图片描述
规则:规则又叫产生式(production rule),它是句子结构的另一种表示结构,它引入了符号“::=”或“→”表示“由……组成”,上述句子的结构可以表示如下:

<句子><主语> <谓语>
<主语><冠词> <形容词> <名词>
<冠词> → the
<形容词> → big
<谓词><动词> <直接宾语>
<动词> → ate
<直接宾语><冠词> <名词>
<名词> → elephant
<名词> → peanut

句子的推导:用规则(产生式)按一定方式去推导或产生句子的过程。

<句子><主语><谓语><冠词> <形容词> <名词> <谓语>
      ⇒ The <形容词> <名词> <谓语>
      ⇒ The big <名词> <谓语>
      ⇒ The big  elephant <谓语>
      ⇒ The big  elephant <动词> <直接宾语>
      ⇒ The big  elephant ate <直接宾语>
      ⇒ The big  elephant ate <冠词><名词>
      ⇒ The big  elephant ate the <名词>
      ⇒ The big  elephant ate the peanut

或者
<句子> + The big elephant ate the peanut

注意:
:代表一步推导
+ :代表多步推导

文法的EBNF表示:所谓文法的EBNF表示,就是在书写文法的规则时,可采用一些特殊的符号“|”、“{”和“}”、 “(” 和“)”、“[” 和“]”来表示文法,这些符号叫做元符号。其中“{”和“}”、 “(” 和“)”、“[” 和“]”这些元符号总是成对出现。
1. 元符号“|”:表示“或”.对于具有相同左部的那些规则,如α → β 1、 α→β 2、…、 α→β n
可以缩写为:α → β 1 | β 2 | … | β n
2. 元符号“{”和“}”:表示可重复连接, { t}mn 表示符号串t可重复连接n到m次,而 { t} 表示符号串t可重复连接0到无穷次。
例如,<无符号整数>→ { <>}31
与<无符号整数>→<数字>|<数字><数字>|<数字><数字><数字>相同
E→E+T|T 与 E→T{+T} 相同
而字母打头、后面可跟数字或字母的不超过8个字符的标识符文法则为:
<标识符>→<字母> { <>|<>}70

3.元符号“[”和“] ”:表示括起的内容可有可无。如[t]表示符号串t可有可无。
例如:

<IF语句>→IF <布尔表达式> THEN <语句>
<IF语句>→IF <布尔表达式> THEN <语句> ELSE <语句> 可写成:
<IF语句>→IF <布尔表达式> THEN <语句> [ELSE <语句>]

4.元符号“(”和“)”:表示括号内的成分优先。常用于在规则中提取公因子。
例如,U→xy | xw | …… | xz 可写成:U→x(y | w | …… | z)

文法的形式定义

定义1: 产生式(或规则)是一有序对(A, α),通常写为:
A→ α或 A∷= α 其中A是一个符号作为产生式左部,α为有穷符号串作为产生式的右部,“→”或“∷=”表示“定义为…”或“由…组成“。

定义2:文法是一个四元组:G[S]=(VN, VT, P, S),其中:
VN是一个非空有穷集合,该集合中的每个元素称为非终结符号。如上例中VN={<句子>、<主语>、<谓语>、<直接宾语>、<名词>、<动词>、<冠词>}
VT是一个非空有穷集合,该集合中的每个元素称为终结符号。如上例中VT={monkey、banana、ate、has、the、a}

并且VN∩VT=φ,而V=VN∪VT称为该文法的字汇表。
P是一个非空的有穷集合,它的每个元素叫做产生式或规则。产生式的形式为:α→β或α::=β
α是产生式的左部且不能为空,β是产生式的右部,并且α、β∈V。
S是VN集合的一个特殊的非终结符号,称为文法的开始符号。它至少必须在某个产生式的左部出现一次。<句子>就是上例文法的识别符号。

定义3 :符号串的推导与归约:已给文法G=(VN,VT,P,S),V= VN∪VT,令x,y,α,β∈V*,且α→β∈P,此时,由
符号串xαy能够直接产生出符号串xβy,我们称:
符号串xβy是符号串xαy的直接推导;
符号串xαy是符号串xβy的直接归约;
记作: xαy xβy
例如有文法
1. <无符号整数> → <数字串>
2. <数字串> → <数字串><数字>|<数字>
3. <数字> → 0|1|2|3|4|5|6|7|8|9
对符号串<无符号整数>利用规则1可直接推导出<数字串>:<无符号整数> => <数字串>
对符号串<数字串>利用规则2可直接推导出<数字串><数字>:<数字串> => <数字串><数字>
对符号串<数字串><数字>利用规则3可直接推导出<数字串>2:<数字串><数字> => <数字串>2
将上述三个推导连接起来,可得如下推导过程:<无符号整数> => <数字串> => <数字串><数字> => <数字串>2

若有α12,…,αn∈V* 且α1 α2 αn-1 αn 。则称αn是α1的推导。记作:α1 + αn
特别约定:若在推导关系α1 + αn 中允许α1= αn,则称 αn1 的广义推导。记作:α1 αn

定义4: 句型和句子:设G=( VN VT ,P,S)是一文法,
若 S α,α∈ V ,则称α为文法G的句型。
若 S α,α∈ VT ,则称α为文法G的句子。

句型是从识别符号开始经过0步或多步推导出的可由终结符号和非终结符号组成的符号串而句子是从文法的识别符号推导出的完全由终结符号组成的符号串。句子是特殊的句型,是完全由终结符号组成的句型。从文法的开始符号利用规则进行推导,一旦推导出句子,推导过程就不能再继续进行,因为句子中没有非终结符号。假设符号串x是某一推导的结果,那么,x是句子的必要条件是从S到x的推导长度大于等于1,即 S + x,而不可能是S x。这是因为识别符号S是非终结符号,而x是终结符号串,显然,S不可能与x相等,所以S不可能经过0步推导就等于x。

文法G所对应的语言,记作L(G)={ω|ω∈ VT ,且S + ω} 。
语言是所有句子构成的集合,它是所有终结符号串所组成的集合 VT 的子集,即L(G) VT

定义5:规范推导(归约):对于直接推导xαy xβy,如果y只包含终结符号或为空符号串,那么就把这种直接推导称为规范(最右)推导,跟其对应的归约称为规范(最左)归约,且记作:
xαy r xβy 。即:每次对符号串中最右非终结符号进行替换。
每一个句子都有一个规范推导,但并非每一个句型都有规范推导,只有那些能用规范推导产生的句型才是规范句型。

形式语言理论可以证明以下两点:
1. 给定一个文法G,就可以从结构上唯一地确定其语言:G L(G)
2. 给定一种语言L,能确定其文法,但这种文法可能不是唯一的: L G1或G2
定义6 :等价文法:如果L(G1)=L(G2) ,那么称G1和G2为等价文法。

定义7: 递归产生式和递归文法:设给定文法G=( VN

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值