编译原理文法__上下文无关文法及其语法树-二义性
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
G:〈语句〉→ if〈条件〉then〈语句〉 | if〈条件〉then〈语句〉else〈语句〉 | 其他语句
语句
if 条 then 语 if 条 then 语 else 语
语句 if 条 then 语 else 语
if 条 then 语
if c1 then if c2 then s1 else s2
文法二义性 Ambiguity
• 一个句型是否只对应唯一的一棵语法树? G: E→i | E+E | E*E | (E) 句型: i*i+i E E E + E E i E
*E
i i
*E i
i
i E + E
(1). 什么是文法的二义性
• 如果一个文法存在某个句子对应两棵不同的语 法树,则说这个文法是二义的。 • 或者说,若一个文法中存在某个句子,它有两个 不同的最左(最右)推导,则这个文法是二义的。 E E
(4).二义性的消除
定义表达式的无二义文法 G' : E→ T | E+T T→ F | T*F F→ (E) | i
* 定义条件语句Hale Waihona Puke Baidu无二义文法
G': <语句> → <匹配句> | <非匹配句> <匹配句 >→ if<条件>then<匹配句 >else<匹配句 > | <其他语句> <非匹配句> → if <条件> then <语句 > | if<条件>then<匹配句>else<非匹配句>
规则: 每个else和最近的尚未匹配的then匹配
if c1 then if c2 then s1 else s2
* (5). 先天二义的语言
• 如果产生上下文无关语言的每一个文法都是二 义的,则说此语言是先天二义的。
• There are some languages, for which no unambiguous grammars can be found. Such languages are said to be inherently ambiguous.
E + E
E
E
*E
i i
*E i
i
i E + E
i
(2). 二义性的判定
• 二义性问题不可判定
不存在一个算法, 能在有限步骤内, 确切判定任给的 一个文法是否为二义的 二义性: 存在性证明 无二义性: 可以为无二义性寻找一组充分条件
(3). 二义性证明举例
证明以下文法是二义的 G:〈语句〉→ if〈条件〉then〈语句〉 | if〈条件〉then〈语句〉else〈语句〉 | 其他语句 证明: 找到一个句子, 该句子对应两个不同的语法树
* (6). 文法的二义性和语言的二义性
• 二者是不同的概念 • 例如: 两个等价的文法,一个是二义的,一个是非 二义的,但产生的语言是相同的 G : E→ E+E | E*E | (E) | i G' : E→ T | E+T T→ F | T*F F→ (E) | i 二义文法 非二义文法
(1). 什么是文法的二义性 (2). 二义性的判定 (3). 二义性证明举例 (4). 二义性的消除举例 (5). 先天二义的语言 (6). 文法的二义性和语言的二义性