我对上下文无关语法中的歧义概念并不十分清楚。如果有人可以帮助我解释这个概念或提供一个好的资源,我会非常感激。
答案 0 :(得分:5)
T * U;
这是指针声明还是乘法?在知道T
和U
实际 之前,您无法判断。
因此表达式的语法取决于表达式的语义(含义)。这不是没有上下文的 - 在无上下文的语言中,只能是一件事,而不是两件事。 (这就是为什么他们不允许这样的表达式是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
重构的语法将始终明确地派生字符串,即派生将始终生成相同的分析树。