程序设计语言编译原理

上下文无关文的形式化描述:

一个上下文无关文法是一个四元组,(Vt, Vn,S, P)其中,

Vt是一个非空有限集,它的每个元素称为终结符号;

Vn是一个非空有限集,它的每一个元素称为非终结符号。其中Vn与Vt的交集是空集。

S是开始符号

p是产生式的集合,产生式的形式是P->a.其中P属于Vn,a属于Vt并Vn。

最左推导和最右推导

所谓最左推导就是对推导的每一步中都对最左非终结符进行替换。

所谓最右推导就是对推导的每一步中都对最右非终结符进行替换。

 

语法分析树与二义性

语法分析树的意义:

一颗语法分析树表示了一个句型种种可能的(但是未必是全部可能)的推导过程,包括最左和最右推导。那么一个句型是否只有一棵语法分析树和一个唯一最左最右推导呢,其实不然。可能有的句型存在多个语法分析树,这样的句型叫做二义性文法。已经可以证明的是,二义性文法是不可判定的。

对于描述程序语言的文法的限制:

1)文法中不能包括任何这样形式的产生式:P->P

2)每个非终结符都必须有用处:对于任何P都不存在永不终结的回路。

我们以后讨论的文法都必须满足这样的两个条件,称为简化了的文法。

形式语言鸟瞰

形式语言是Chomsky于1956年建立的,这种理论对计算机科学有着深刻的影响,特别是在编译原理和计算复杂性理论上。Chomsky把文法分成四种类型,0型文法,1型文法,2型和3型。这几类文法的区别在于对产生式有不同的限制。

0型文法:0型文法是这样一种文法,如果它的每个产生式,a->b是中至少包含一个终结符。如果对0型文法分别施加以下的第i条限制,则我们就得到i 型文法:

1)G的任何产生式a->b均满足|a|<=|b|(其中|a|和|b|分别为a和b的长度);

2)  G的任何产生式为a->b A属于Vn,b属于Vn和Vt的并集

3)G的任何产生式为A->aB或A->a,其中a属于Vt、A、B属于Vn

1型文法属于上下文相关文法。这种文法意味着,对非终结符进行替换是必须考虑上下文,并且不允许使用空串替换非终止符。

如果非终结符替换的时候可以不考虑上下文,这就是上下文无关文法,也就是2型文法。

3型文法也叫做右线性文法。3型文法还有另外一种形式,叫做左线性文法。由于3型文法等价于正规式,所以3型文法也可以叫做正规文法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值