什么是上下文无关语法?

| 我对上下文无关语法中的歧义概念不太清楚。如果有人可以帮助我并解释这个概念或提供很好的资源,我将不胜感激。     
已邀请:
T * U;
那是指针声明还是乘法?在知道know1ѭ和
U
实际上是什么之前,您不能说。 因此,表达式的语法取决于表达式的语义(含义)。这不是上下文无关的-在上下文无关的语言中,这可能只是一件事,而不是两件事。 (这就是为什么他们不让这样的表达式成为D中的有效语句的原因。) 另一个例子:
T<U> V;
这是模板用法还是大于和小于操作? (这就是为什么他们在D中将语法更改为
T!(U) V
的原因-括号仅具有一种用途,而插入号具有另一种用途。)     
您将如何解析:
if condition_1 then if condition_2 then action_1 else action_2
“其他”属于哪个“如果”? 在Python中,它们是:
if condition_1:
    if condition_2:
        action_1
    else:
        action_2
和:
if condition_1:
    if condition_2:
        action_1
else:
    action_2
    
考虑一个无上下文语法识别的输入字符串。如果字符串具有两个或更多个不同的最左派生,或者解析您希望的树,则该字符串是不明确的派生。如果语法产生歧义,则语法是歧义的。 例如,语法S-> E + E | E * E是模棱两可的语法,因为它模棱两可地得出字符串x + x * x,换句话说,有不止一个解析树来表示该表达式(实际上有两个)。 可以通过将语法更改为以下内容来使语法清晰: E-> E + T | Ť T-> T * F | F F->(E)| X 重构的语法将始终明确地导出字符串,即,导出将始终产生相同的解析树。     

要回复问题请先登录注册