はい、コンテキスト依存文法(CSG)は未定義/未宣言/非バインド変数のチェックを行うのに十分強力ですが、残念ながらCSGの文字列を解析するための効率的なアルゴリズムを知りません。
状況依存言語の実際の例は、Cプログラミング言語です。最初に変数を宣言し、後で使用するような機能により、C言語を状況依存言語にします(CSL)になります。(型付けされていないラムダ計算については知りません)。
また、CSL(またはCSG)の線形解析アルゴリズムを知らないためです。これがコンパイラ設計の理由です。CFG(制限された形式の場合)を解析する効率的なアルゴリズムを知っているので、構文チェックにCFG(およびその解析アルゴリズムのみ)を使用します。コンパイラは、まずコンテキストのない機能を解析し、その後、問題のある方法でコンテキストに依存する機能を処理します(たとえば、定義されている場合、シンボルテーブルで使用されている変数をチェックします。
また、文脈依存文法は自然言語処理(NLP)で使用されます。そして、ほとんどの自然言語は状況依存言語の例です。(サンスクリット語がわからない語)。
愚かではあるが単純な例で説明しようとします(単なるアイデアであり、改良することができます)。
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]
理由:<TENSE>の値は値<NOUN>(たとえば、I <TENNSE> --> I am
)に依存するため、文法は英語の正しいステートメントを生成しません。
実際、完全な英語の文脈自由文法を書くことはできません!
お気づきかもしれませんが、自然言語の翻訳者や文法チェッカーは正しく動作しません(長いステートメントで試してください)。この問題は状況依存の解析アルゴリズムに起因するためです。
参考:アルン・クマール博士の講義を見ることができます。
いくつかの講義では、彼はあなたが興味を持っていることを正確に説明します。