3

文脈自由文法におけるあいまいさの概念については、あまり明確ではありません。誰かが私を助けて概念を説明したり、良いリソースを提供してくれたりしたら、とても感謝しています.

4

3 に答える 3

5
T * U;

それはポインタ宣言ですか、それとも乗算ですか?TU実際に何であるかを知るまではわかりません。

したがって、式の構文は、式のセマンティクス(意味) に依存します。それは文脈自由ではありません -- 文脈自由言語では、それは 2 つではなく 1 つにすぎません。(これが、そのような式をDで有効なステートメントにしない理由です。)

もう一つの例:

T<U> V;

それはテンプレートの使用法ですか、それとも大なり小なり操作ですか? (これが、構文を D に変更した理由ですT!(U) V括弧には 1 つの用途しかありませんが、キャレットには別の用途があります。)

于 2011-05-17T18:31:22.660 に答える
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
于 2011-05-17T18:39:01.880 に答える
0

文脈自由文法によって認識される入力文字列について考えてみます。文字列が2つ以上の異なる左端の派生を持っている場合、または必要なツリーを解析する場合、文字列はあいまいに派生します。文字列をあいまいに生成する場合、文法はあいまいです。たとえば、文法S-> E + E | E * Eは、文字列x + x * xをあいまいに導出するため、あいまいな文法です。つまり、式を表す解析ツリーが複数あります(実際には2つあります)。文法を次のように変更することで、文法を曖昧さをなくすことができます。

E-> E + T | T

T-> T * F | F

F->(E)| バツ

リファクタリングされた文法は、常に文字列を明確に導出します。つまり、導出は常に同じ解析ツリーを生成します。

于 2013-02-17T00:05:44.330 に答える