二义性文法是指一种产生式规则可以被解释成两种或更多种不同的语法结构的文法。这种文法会导致语言的歧义和不确定性,使得相同的语句可以有不同的解释。
以下是三个例子:
-
S → aSb | ε 这个文法可以生成字符串"aaabbb",但是它有两种不同的解释:一种是S → aSb → aaSbb → aabbb,另一种是S → aSb → aabSb → aabbb。这个文法因此是二义性的。
-
S → aSb | cSd | ε 这个文法可以生成字符串"acbd",但是它也有两种不同的解释:一种是S → cSd → acSbd → acbd,另一种是S → aSb → aεb → ab。因此,这个文法也是二义性的。
-
S → aA | aB A → aA | ε B → bB | ε 这个文法可以生成字符串"aa",但是它有两种不同的解释:一种是S → aA → aaA → aaa,另一种是S → aB → aaB → aaa。因此,这个文法也是二义性的。
无二义性文法是指一种产生式规则只能被解释成一种语法结构的文法。这种文法不会导致歧义和不确定性,使得相同的语句只有唯一的解释。
以下是三个例子:
-
S → aSb | ε 这个文法可以生成字符串"aaabbb",但是它可以被解释成唯一的语法结构:S → aSb → aaSbb → aaaεbbb → aaabbb。因此,这个文法是无二义性的。
-
S → aA | bB A → cA | d B → cB | e 这个文法可以生成字符串"acccde",但是它也可以被解释成唯一的语法结构:S → aA → acA → accA → accd,因此,这个文法是无二义性的。
-
S → aBc B → d | ε C → e | ε 这个文法可以生成字符串"adc"和"aec",但是它可以被解释成唯一的语法结构:S → aBc → adCc → adc或S → aBc → aeBc → aec。因此,这个文法也是无二义性的。