形式语言与编译-上下文无关文法

CFG定义

形式定义:CFG G = (𝕍, T, 𝓟, S),其中,
• G为文法标识(可省略),
• 𝕍是变元的有穷集合,
• T是终结符的有穷集合(字母表,也习惯用Σ),
• 𝓟是产生式规则的有穷集合,
• S是一个初始符号,S∈𝕍。
⌲ 文法G所定义的语言,L(G) = L(S) ⊆ T*,是T上的语言

eg:

E ⟶ E + E | E * E | (E) | d
CFG ({E}, {+, *, (, ), d}, {(E, E+E), (E, E*E), (E,\(E\)), (E, d)}, E)

句型:从初始符号推导出来的任意串。
⌲ 句子:从初始符号推导出来的终结符串。
⌲ 句子是句型的一个特例。

最左、最右推导

每次替换最左变元还是最右变元。
eg:
问句子 a*(ab+10)的最左、
最右推导 ?

E → E+E | E*E | (E) | F 
F → aF | bF | 0F | 1F | ε

在这里插入图片描述

语法分析树

• 叶子:用终结符或ε标记
• 内结点:用变元标记
• 根:用初始符号标记

歧义性文法

选择不同的候选式常常会推导出不同的句子,但有时不尽然。如果真出现同一个句子有多个语法树的情况,表明文法是有歧义的。

一个 CFG 是歧义的 若它的语言有元素至少是两个语法树的产物。

定理:对于CFG的句子w有两个语法树当且仅当有两个最
左推导。

把歧义文法转换为无歧义文法

⌲ 歧义文法:
• B → BB | (B) | ()
⌲ 无歧义文法:
• B → (RB | ε
• R → ) | (RR

CFG化简

有用与无用的文法符号

从初始符号推导句子的步骤中出现的符号都是有用的。

⌲ 可达符号:由初始符号推导出的任意串中的文法符号。
⌲ 如果S ⇒* αXβ, α,β∈(V∪T), 那么X是可达的。
⌲ 有产出的符号:能推导出终结符串的文法符号。
⌲ 如果X⇒
w, X∈(V∪T), w∈T,那么X是产出的。

终结符,一定是产出的,但有可能是不可达的;
变元,4种情形都有可能。

eg:
⌲ 例:S⟶AB;A⟶aA | a;B⟶AB
⌲ 可达符号:S,A,B,a
⌲ 不可达符号:无
⌲ 有产出的符号:A,a
⌲ 无产出符号:S,B
⌲ 因为初始符号S是无产出的,所以该语言是空

去除无用符号

从G中去除无产出变元得到CFG Gg = (Vg, T, Pg, S)
从Gg中去除不可达符号得到CFG Gu = (Vu, Tu, Pu, S)

在这里插入图片描述

去除ε-产生式

定义:CFG G=(V,T,P,S),A∈V是可空变元,当且仅当A⇒*ε。

在这里插入图片描述

⌲ 输入:G = (V, T, P, S)
⌲ 输出:Ga = (V, T, Pa, S)

  1. Pa初始化为空集合;
  2. 找出G的所有可空变元;
  3. 对P中每个非ε产生式,将它的变形全部加入Pa;
  4. Pa 中去掉以ε为候选式的所有产生式。

eg:
在这里插入图片描述

去除单位产生式

单位产生式:右部为单个变元的产生式。

关键点:找出所有单位对(A, B) 使得A ⇒* B 仅通过一系列单位产生式得到。

在这里插入图片描述

总结

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值