三、程序语言的语法描述


程序语言的语法描述

文法

描述语言的语法结构的形式规则

image-20210915103510993

(箭头表示定义)

Screenshot_3


语法描述的几个概念

字母表:一个有情字符集,记为∑

字母表中每个元素称为字符

​ ∑上的(也叫字符串)是指由∑中的字符所构成的一个有穷序列

​ 不包含任何字符的序列称为空字,记为ε

​ 用∑*表示∑上的所有字的全体,包含空字ε

​ 例如:设∑={a , b},则∑*={ε,a,b,aa,ab,ba,bb,aaa……}


​ ∑*的子集U和V的连接)定义为

UV={αβ|α∈U & β∈V}

​ 示例:设U={a,aa} V={b,bb}

​ UV={ab,abb,aab,aabb}

​ V自身的n次积为Vn=VV……V(n个)

​ V0={ε}

​ V*是V的闭包:V*=V0∪V1∪V2∪V3……

​ V+是V的正规闭包:V+=VV*



上下文无关文法

​ 上下文无关文法G是一个四元组G=(VT,VN,S,P),其中

​ ◆VT终结符(Terminal)集合(非空)

​ ◆V∶非终结符(Nonterminal)集合(非空),且V∩VN

​ ◆S∶文法的开始符号,S∈VN

​ ◆P∶产生式集合(有限),每个产生式形式为

​ P→α , P∈VN , α∈(VT∪VN)*

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

image-20210915191543984

Screenshot_1



文法生成语言

推导

​ 定义∶称αAβ直接推出αγβ,即 αAβαγβ 仅当A→γ是一个产生式,且α , β (V∪VN)*。

​ 如果α1⇨α2⇨...⇨αn,则我们称这个序列是从α1到αn,的一个推导。若存在一个从α到αn的推导,则称α1可以推导出αn

Screenshot_2

Screenshot_3


句型、句子和语言

​ 假定G是一个文法,S是它的开始符号。如果S⇨*α则称*α是一个句型

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

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

L(G)={α|S⇨+α,α∈V*T}

image-20210915194728591

image-20210915194939607

image-20210915195436456

image-20210915195620155



推导与语法树

最左推导和最右推导

​ 从一个句型到另一个句型的推导往往不唯一

​ E+E⇨i+E⇨i+i

​ E+E⇨E+i⇨i+i

最左推导∶任何一步α ⇨β都是对α中的最左非终结符进行替换

最右推导∶任何一步α ⇨β都是对α中的最右非终结符进行替换


语法树

​ 用一张图表示一个句型的推导,称为语法树

​ —棵语法树是不同推导过程的共性抽象

image-20210915201055761

语法树与二义性(ambiguity)

Screenshot_4

文法的二义性∶如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义

语言的二义性:一个语言是二义的,如果对它不存在无二义的文法

​ 对于语言L,可能存在G和G',使得L(G)=L(G')=L,有可能其中一个文法为二义的,另一个为无二义的

​ 自然语言的二义性:John saw Mary in a boat

​ John在船上看到Mary John看到Mary在船上

image-20210915202259349

​ 表达式→项│表达式+项

​ 项→因子│项*因子

​ 因子→(表达式)| i

image-20210915202447516

二义性问题是不可判定问题,即不存在一个算套杏熊传有限步骤内,确切地判定一个文法

可以找到一组无二义文法的充分条件



形式语言鸟瞰

​ 乔姆斯基于1956年建立形式语言体系,他把文法分成四种类型∶0,1,2,3型

​ 与上下文无关文法一样,它们都由四部分组成但对产生式的限制有所不同

​ G=(VT,VN,S,P)

​ ◆VT终结符(Terminal)集合(非空)

​ ◆V∶非终结符(Nonterminal)集合(非空),且V∩VN

​ ◆S∶文法的开始符号,S∈VN

​ ◆P∶产生式集合(有限)


0型(短语文法,图灵机)

​ 产生式形如∶α→β

​ 其中 : α∈ (VT∪VN)*且至少含有一个非终结符;

​ β∈ (V∪VN)*

1型(上下文有关文法,线性界限自动机)

​ 产生式形如︰α→β

​ 其中:|α|≤|β|,仅S→ε例外

2型(上下文无关文法,非确定下推自动机)

​ 产生式形如:α→β

​ 其中:A∈ VN ; β∈(VT ∪VN)*

3型(正规文法,有限自动机)

产生式形如∶A→αB或A→α

其中: α∈VT* ; A,B∈VN

(右线性文法)

产生式形如∶A→Bα或A→α

其中:α∈VT* ; A,B∈VN~

(左线性文法)


四种类型文法描述能力比较

image-20210915211221528


上下文无关文法与上下文有关文法

L={anbn|n>1}不能由正规文法产生,但可由上下文无关文法产生

​ G(S):S>aSb] ab

L={anbncn|n>1}不能由上下文无关文法产生,但可由上下文有关文法产生

​ G(S):

​ S→ aSBC| aBC

​ CB → BC

​ aB → ab

​ bB → bb

​ bC → bc

​ cC →> cc

image-20210915212024078

​ 程序设计语言不是上下文无关语言,甚至不是上下文有关语言

​ L={ α⊂α|α∈{a,b}*}不能由上下无关文法产生,甚至连上下有关文法也不能产生,只能由0型文法产生

​ ◆标识符引用

​ ◆过程调用过程中,“形-实参数的对应性"(如个数,顺序和类型二致性)

​ 对于现今程序设计语言,在编译程序中,仍然采用上下文无关文法来描述其语言结构

image-20210915213107558


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM