编译原理 —— 文法的定义

本文深入探讨编译原理中的文法定义,包括符号约定、文法形式化定义、文法分类(0型、1型、2型、3型文法)及其关系,以及文法的实用限制和变换。通过对各种文法类型的示例分析,帮助理解文法在程序设计语言中的应用。

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

符号约定


文法的形式化定义

V T V_T VT:终结符是文法所定义的语言的基本符号,有时也称为token。(对应词义分析)
V N V_N VN:非终结符是用来表示语法成分的符号,有时也称为"语法变量",可以推出其它的语法成分(对应语法分析)
P P P:
325f56d286287f411b2a0d8f73f87496.png
S S S S ∈ V N S∈V_N SVN , 开始符号表示的是该文法中最大的语法成分

示例

ec33bfe68b5a5892c348651b386f767d.png


产生式的简写

在这里插入图片描述


文法分类体系

0型文法

  • 又称为无限制文法或短语结构文法(PSG)

例如,有0型文法 G = ( V N , V T , P , S ) G=(V_N,V_T,P,S) G=VNVTPS,其中 V N = { A , B , S } , V T = { 0 , 1 } V_N=\{A,B,S\},V_T=\{0,1\} VN={ABS}VT={01}

P = { S → 0 A B , 1 B → 0 , B → S A ∣ 01 , A 1 → S B 1 , A 0 → S 0 B } P=\{S→0AB,1B→0,B→SA|01,A1→SB1,A0→S0B\} P={S0AB1B0BSA01A1SB1A0S0B}

1型文法

  • 又称为上下文有关文法(CSG)
  • CSG中不包含ε产生式

例如,有1型文法 G = ( V N , V T , P , S ) G=(V_N,V_T,P,S) G=VNVTPS,其中 V N = { A , B , S } , V T = { a , b , c } V_N=\{A,B,S\},V_T=\{a,b,c\} VN={ABS}VT={abc}

P = { S → a S A ∣ a b B , B A → B A ′ , B A ′ → A A ′ , A A ′ → A B , b B → b c , c B → c c } P=\{S→aSA|abB,BA→BA',BA'→AA',AA'→AB,bB→bc,cB→cc\} P={SaSAabBBABABAAAAAABbBbccBcc}

2型文法

  • 又称为上下文无关文法(CFG)
  • 上下文无关文法可用于描述语法构造

例如,有2型文法 G = ( V N , V T , P , S ) G=(V_N,V_T,P,S) G=VNVTPS,其中 V N = { A , B , S } , V T = { a , b } V_N=\{A,B,S\},V_T=\{a,b\} VN={ABS}VT={ab}

P = { S → a B ∣ b A , A → a ∣ a S ∣ b A A , B → b ∣ b S ∣ a B B } P=\{S→aB |bA,A→a|aS|bAA,B→b|bS|aBB\} P={SaBbAAaaSbAABbbSaBB}

3型文法

  • 又称为正则文法,包括左线性文法和右线性文法
  • 正则文法可用来描述大多数单词,但是,它的生成能力有限,几乎描述不了语法构造
  • 正则文法一般用于词法分析,通过NFA、DFA就可以识别
  • 两套规则不能同时出现在一个语法中,只有完全满足其中的一个才能算 3型文法。

文法分类体系间的关系


有关文法的实用限制和变换

  1. 文法中不能含有形如 A → A A→A AA 的规则,这种规则称为有害规则。这样的规则对描言显然是没有必要的,并且它还会引起文法的二义性。所以在设计文法时,应该避免定义里的规则。
  2. 文法中不能有多余规则。所谓多余规则是指文法中出现以下两种规则的情况,一是某条规则 A → α A→α Aα 的左部符号 A A A 不在所属文法的任何其他规则右部出现,即在推导文法的所有句子中始终都不可能用到的规则;二是对文法中的某个非终结符A,无法从它推导出任何终结符号串来。

参考地址:

https://www.icourse163.org/learn/HIT-1002123007?tid=1003246005#/learn/announce

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值