什么是模糊的上下文免费语法?

时间:2011-05-17 18:30:27

标签: terminology context-free-grammar ambiguous-grammar

我对上下文无关语法中的歧义概念并不十分清楚。如果有人可以帮助我解释这个概念或提供一个好的资源,我会非常感激。

3 个答案:

答案 0 :(得分:5)

T * U;

这是指针声明还是乘法?在知道TU实际 之前,您无法判断。

因此表达式的语法取决于表达式的语义(含义)。这不是没有上下文的 - 在无上下文的语言中,只能是一件事,而不是两件事。 (这就是为什么他们不允许这样的表达式是D中的有效陈述。)

另一个例子:

T<U> V;

这是模板用法还是大于和小于操作? (这就是他们在D中将语法更改为T!(U) V的原因 - 括号只有一次使用,而插入符则有另一种用途。)

答案 1 :(得分:2)

你会如何解析这个:

if condition_1 then if condition_2 then action_1 else action_2

“else”属于哪个“if”?

在Python中,它们是:

if condition_1:
    if condition_2:
        action_1
    else:
        action_2

if condition_1:
    if condition_2:
        action_1
else:
    action_2

答案 2 :(得分:0)

考虑由无上下文语法识别的输入字符串。如果字符串有两个或多个不同的最左边的派生,或者你想要的解析树,那么它就会被模糊地导出。如果语法模糊地生成字符串,则语法不明确。 例如,语法S - > E + E | E * E是一个模糊的语法,因为它模糊地导出字符串x + x * x,换句话说,有多个解析树来表示表达式(实际上有两个)。 通过将语法更改为:

,语法可以变得不明确

E - &gt; E + T | Ť

T - &gt; T * F | ˚F

F - &gt; (E)| x

重构的语法将始终明确地派生字符串,即派生将始终生成相同的分析树。