📜  上下文无关语法和上下文无关语言中的歧义

📅  最后修改于: 2022-05-13 01:54:10.584000             🧑  作者: Mango

上下文无关语法和上下文无关语言中的歧义

在阅读本文之前,我们建议您先阅读下推自动机和上下文无关语言。假设我们有一个带有产生式规则的上下文无关文法 G:S -> aSb | bSa |不锈钢 | e最左推导 (LMD) 和推导树:从起始符号 S 到字符串的最左推导是通过用相应产生式规则的 RHS 替换最左边的非终结符号来完成的。例如,从上面的语法 G 中最左边的字符串abab 的推导是这样完成的:
S => a S b => ab S ab => abab
使用生产规则替换带下划线的符号。派生树:它讲述了如何使用 S 的生产规则派生字符串,如图 1 所示。
最右推导(RMD):从起始符号 S 开始的最右推导是通过用相应产生式规则的字符串替换最右边的非终结符号来完成的。例如;从上面的语法 G 中最右边的字符串abab 推导如下:
S => S S => Sa S b => S ab => a S bab => abab
使用生产规则替换带下划线的符号。使用最右边推导的 abab 推导树如图 2 所示。


推导可以是 LMD 或 RMD,也可以是两者,或者都不是。例如, S => a S b => ab S ab => abab 是 LMD 和 RMD 但S => S S => Sa S b => S ab => a S bab => abab 是 RMD 但不是LMD。模糊上下文无关语法:如果由语法生成的字符串存在多个 LMD 或多个 RMD,则上下文无关语法称为模糊语法。歧义语法中的字符串也会有不止一个派生树。上面描述的语法是模棱两可的,因为有两个派生树(图 1 和图 2)。字符串abab 可以有多个 RMD,它们是:
S => S S => Sa S b => S ab => a S bab => abab
S => a S b => ab S ab => abab歧义上下文无关语言:如果没有明确的语法来定义该语言,则将上下文无关语言称为歧义,并且它也称为固有歧义上下文无关语言。
例如- L={a n b n c m } U {a n b m c m }笔记 :

  • 如果上下文无关文法 G 有歧义,则由文法 L(G) 生成的语言可能有歧义,也可能没有歧义。
  • 将模糊 CFG 转换为明确 CFG 并不总是可能的。只有一些不明确的 CFG 可以转换为明确的 CFG。
  • 没有将模糊 CFG 转换为明确 CFG 的算法。
  • 始终存在对应于明确 CFL 的明确 CFG。
  • 确定性 CFL 始终是明确的,并由 LR 解析器解析。