高级语言及其语法描述

1.主要内容:

1.程序设计语言的语法

2.程序设计语言的语义

3.程序设计语言的特点

4.程序设计语言的语法描述

2.1语法

一组规则,用这组规则可以产生形式上正确的程序,可分为:

1.语法规则:合法程序的构成规则,也就是如何把各个单词符号组成更大的语法单位(语句、程序)(用上下文无关文法进行描述);

2.词法规则:合法单词的构成规则,也就是如何从字母表中选择字符构成一个合法单词(用有限状态自动机或正规式描述)。

语法包括三个基本概念:

1.字母表:一个有限的字符集

2.单词符号:具有独立意义的最基本结构

3.语法单位:由单词符号构成的更大的结构,一般包括表达式、语句、分程序、函数、程序。

2.2语义

语义是指这样的一组规则,使用它可以定义一个程序的意义。

语义描述方法:属性文法和基于属性文法的语法制导翻译方法。

2.3特点

程序设计语言的一般特性包括:

1.程序结构:包括支持过程的嵌套定义和不支持过程的嵌套定义。程序结构的不同,决定了符号表构造方法的不同。

2.程序设计语言支持特定的数据类型和操作

3.程序设计语言支持不同的语句与控制结构

2.4语法描述
2.4.1与文法定义相关的几个概念和术语
1.空字:不包含符号的序列称为空字,记为ε。
2.用∑*表示上的所有符号串的全体,空字也包括在其中。
3. 表示不含人何元素的空集{}。
2.4.2上下文无关文法

文法是描述语言的语法结构的形式规则(即语法规则)。


上下文无关文法的特点:它所定义的语法范畴(或语法单位)是完全独立于这种范畴可能出现的环境的。
特点:独立性

        缺点:不能用来描述自然语言

       归纳起来,一个上下文无关文法G包括四个组成部分:一组终结符号,一组非终结符,一个开始符号,以及一组产生式。

形式上定义一个上下文无关文法G是一个四元式(VT,VN,S,P)。

1.VT是一个非空有限集,它的每一个元素称为终结符号;
2.VN是一个非空有限集,它的每一个元素称为非终结符号,
VT∩VN=∅;
3.S是一个非终结符号,称为开始符号;
4.P是一个产生式(有限)集合,每个产生式形式是A→α,其中,P∈VN,α∈(VT∪VN)*

       开始符号S至少必须在某一产生式的左部出现一次。

1.所谓终结符号乃是组成语言的基本符号,即在程序语言中以前屡次提到的单词符号,如基本字,标识符,常数,算符和界符等。

2.所谓非终结符号(也称语法变量)用来代表语法范畴,是一个类(或集合)记号,而不是个体记号。

3.开始符号是一个特殊的非终结符号,它代表所定义的语言中我们最感兴趣的语法范畴。

4.产生式(也称为产生规则或简称规则)是定义语法范畴的一种书写规则。
    一个产生式的形式是  A→ α
其中箭头左边的A是一个非终结符,称为产生式的左部符号;

箭头右边的α是终结符号或与非终结符号组成的一符号串,称为产生式的右部,或称候选式。

2.4.2.1推导与直接推导

 直接推导:仅当A->γ是一个产生式,有αAβ =>αγ β;

 推导的描述形式:

1. :任意次推导

2. :至少一次推导

2.4.2.2句型与句子

假定G是一个文法,S是它的开始符号。

如果Sα(表示从S出发,经0步或若干步可推出α),则称α是一个句型。

仅含终结符号的句型是一个句子。

文法G所产生的句子的全体是一个语言,将它记为L(G).

     L(G)={α|Sα & α∈VT }

2.4.2.3最左(最右)推导

最左(最右)推导:在推导的任何一步α=>β,其中α、β是句型,都是对α中的最左(右)非终结符进行替换,最右推导被称为规范推导。


例2.9: 试构造文法,该文法可以生成所有不能以0开头的偶数,
 解:偶数的组成和特点:

包含符号位,

可以是一位偶数 (A)

2,4,6,8

可以是多位偶数(B)

首位不能为0,末位只能是0,2,4,6,8,中间为任意
G(Z): E->SA|SB
S->+|-| ε
A->2|4|6|8
C->A|1|3|5|7|9
D->0|C
G->0|A
B->CFG

F->DF|D| ε

例2.10: 已知语言L={x | x∈{a,b,c}*},且x的排列是对称的(aabcbaa,aabbaa,等,即回文)。 写出该语言的文法。
   G(Z):  
Z ->a|b|c|ε
|aZa
|bZb
|cZc

2.4.2.4语法分析树与二义性

语法分析树:简称语法树,用来表示推导过程。具有不唯一性。

示例: 例如对于文法 E→E+E|E*E|(E)|i, 关于(i*i+i)的推导形成语法树如图


1.语法树的根结由开始符号所标记。
2.随着推导的展开,当某个非终结符被它的某个候选式所替换时,这个非终结符的相应结就产生了下一代新结点。每个新结点和其父亲结点间都有一条连线。
3.在一棵语法树生长过程中的任何时刻,所有那些没有后代的端末结自左至右排列起来就是一个句型。

如果一个文法存在某个句子对应两棵不同的语法树(有两个不同的最左(最右)推导),则称这个文法是二义的。

2.4.2.5上下文无关文法的几点限制

(1)文法中不含任何下面形式的产生式: P→P因为这种产生式除了产生二义性外没有任何用处。  

(2)每个非终结符P必须有用处。
这一方面意味着,必须存在含P的句型;也就是,从开始符号出发,存在推导 S=>*αPβ.

     另一方面意味着,必须存在终结符串γ∈VT*,使得P=>+γ;也就是,对于P不存在永不终结的回路。

2.4.2.6形式语言鸟瞰

2.习题总结:

1.最左(右)推导:由文法推导出句子,这类题目还算简单,只是要注意推导过程中不是最后才转化为终结符,而是一边推导一边转换;

2.二义性:

 1)证明文法是二义性的问题,方法是构造同等级的终结符号串,判断其是否会产生多棵语法数,(有时候自己构造的不一定就能正好出现多棵语法树尴尬);

 2)消除文法二义性问题,找到两种方法,一是不改变文法规则,修改优先级;二是构造一个等价的无二义性文法(个人觉得还是第一种比较好想一些);

3.给出语言的相应文法:要熟记四类文法的规则(凭着第一感觉死推一般是推不出来的)。

3.课程总结:

以前学编程,现在学程序设计语言的本质,但确实感觉有点绕,有些东西觉得太简单了,一听就明白,有些东西听了也没绕过来,就比如怎么由语言推导相应的文法,简单的一下子出答案,难点的、复杂的就把自己绕进去了尴尬。这一章主要讲的就是文法,概念能理解,有些做题方法还没get到(但是觉得还是比有限自动机好掌握点)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值