编译原理--文法

本文深入解析文法的概念,包括其在编程语言中如何描述语法结构,以及文法的四种类型:0型、1型(上下文有关)、2型(上下文无关)和3型(正规文法)。通过具体示例,阐述每种文法的特点及其在编译过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文法是什么?

文法就是起描述的元语言,通过元语言可以判断句子结构是否符合规范,也就是说,根据一些规则,来确定编程语言的语法,从而实现编译器的功能,不然编译器怎么知道我们写的程序语句是什么意思呢

语言:

语义(Semantics):单个元素的含义

语法(Syntax):各个元素之间的组合规律

语用(Pragmatics):语句和使用者之间的关系

文法是由非终结符(大写字母)和终结符(小写字母)和"->"组成的,比如:

H->a、W->hbq,Q->Cq,hdQ->d

非终结符(大写字母,一般用S,标识Start)一般是写在左边,终结符(小写字母)一般是写在右边

文法分类:

前提:一个组合G=(Vn,Vt,P,S)分别表示非终结符的集合,终结符的集合,推导式的集合,开始符

如上述的H、W、Q是Vn,a、hbq、b是Vt,整个的集合是P

0型文法:

最简单的一个文法,没有那么多的限制条件。左边必须要包含这些元素或者元素组合中的至少一个非终结符,右边可以是这些元素的任意组合,这就是0型文法。文法至少是一个0型文法,如:

H->a

1型文法(上下文有关文法):

在0型文法的基础上加了个要求:右边的长度>=左边的长度(终结符或非终结符的个数)如:

H->a、W->hbq,Q->Cq,而hdQ->d则不符合

另外:S->ε(ε表示空)也是1型文法

2型文法(上下文无关文法):

在1型文法的基础上又加了个要求:左边必须是非终结符(个数无限制)如:

HWQ->fdasf

3型文法(正规文法):

没错,就是在2型文法基础上加要求:可以是非终结符->一个终结符,也可以是一个非终结符->终结符且带一个非终结符。注意这里两个可以是”或“的意思,如:

H->a|aB;H->a|Ba

用分号隔开,这两种是相互独立的,如:

H->a,H->aB,H->Ba这三个组合就不是3型文法了,因为要么全是H->a|aB这种类型的,要么全是H->a|Ba这种类型的

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值