6

私はこれに頭を悩ませているので、shift reduce と reduce reduce conflict を理解する助けが必要です。なぜ問題なのか理解できない文法があります。文法を添付することもできますが、これが実際にどのように機能するかを知りたいです。

最初の質問は、MGrammer が作成するパーサーの種類は何ですか? 私が理解しているように、shift reduce と reduce reduce の競合はパーサーの種類によって異なります。

2 番目の質問です。reduce reduce conflict とは何を意味し、shift reduce conflict とは何を意味するのでしょうか?

私は字句解析の基礎と形式的な文法を知っていますが、言語設計に携わってからしばらく経っているので、ここでのヘルプは大いに当てはまります。

アップデート:

私は空白を重要視する言語を扱っていますが、MGramar でこれを行う可能性について疑問に思っています。あいまいさを解決するために先読みが必要ですか?

4

1 に答える 1

10

簡単な例:

if cond
    if cond2
        cmd
    else
        cmd2

else質問:所属はどこですか?人間の目には、インデントは「2番目にif」と書かれていますが、それはコンピューターには何の意味もありません(Pythonを使用している場合を除く;))。これは、シフト/削減の競合です。

洗練された解決策は、を最高の優先順位の左バインディング演算子として扱うことですelse(これにより、最も近いものに「ハング」しますif)。

削減/削減の競合はあいまいです。便利な良い例はありませんが、文法に1つのトークンによって2つのルールが同時に減少する可能性があるパスがあり、どちらのルールを優先するかを決定するための追加情報がないことを意味します。

[編集]bisonドキュメントにはreduce/reduceの例があります。

于 2009-03-24T09:51:57.760 に答える