是的,上下文相关语法 (CSG) 足够强大,可以检查未定义/未声明/未绑定的变量,但不幸的是,我们不知道任何有效的算法来解析 CSG 字符串。
上下文相关语言的一个真实例子是 C 编程语言。像先声明变量然后再使用它们这样的特性使 C 语言成为 context-sensitive language (CSL)。 (我不知道无类型的 lambda 演算)。
因为我们不知道 CSL(或 CSG)的任何线性解析算法。这就是编译器设计中的原因,我们使用 CFG(及其解析算法)进行语法检查,因为我们知道解析 CFG 的有效算法(如果它是受限形式)。编译器首先解析上下文无关的特征,然后以有问题的方式处理上下文相关的特征(例如,检查符号表中是否已定义任何使用的变量。否则,它会产生错误)。
natural-language processing (NLP) 中也使用了上下文相关语法。大多数自然语言都是上下文相关语言的例子。 (我不确定Sanskrit 语言)。
我会尝试用一个傻但简单的例子来解释它(这只是一个想法,你可以完善它):
NOUN --> { BlueBomber, Grijesh, I, We}
TENSE --> { am, was, is, were}
VERB --> { going, eating, working}
SENTENCE --> <NOUN> <TENSE> <VERB>
现在,使用这个语法,我们可以生成一些正确的语句,但也有一些是错误的。例如,
SENTENCE --> <NOUN> <TENSE> <VERB>
Grijesh is working [Correct statement]
但是
Grijesh am working [wrong statement]
原因: 的值取决于 值(例如,I <TENSE> --> I am),因此语法不会生成正确的英语语句。
实际上我们无法为完整的英语编写上下文无关的语法!
您可能已经注意到,任何自然语言翻译器或语法检查器都无法正常工作(尝试使用长语句)。因为这个问题属于上下文相关的解析算法。
参考:您可以观看Dr. Arun Kumar's lectures。
在一些讲座中,他准确地解释了你感兴趣的内容。