削減を行うことができる2つのプロダクションがあります。必要に応じて優先順位と関連付けを与えた後、ハンドルは1つだけになります。したがって、このステートメントは本当ですか?
2 に答える
これは部分的に当てはまります。通常、reduce / reduceの競合は、優先順位を指定するか、パーサービルダーに適用するルールを他のルールよりも先に選択させることで解決されます。
これは、競合が解決されたことを意味しますが、パーサーが意図したとおりに動作することはありません。競合の原因を調べて、解析しようとしているものを表現するために文法のリファクタリングが必要かどうか、または自動選択/優先順位で十分かどうかを考えると便利です。
ルールがあいまいな文法がある場合は、複数の解釈が得られます。文法が曖昧さを取り除くと主張する必要はありません。何かがあいまいであることに同意し、それを複数の方法で解析することができます。
fruit flies like an arrow.
解析の結果は複数の解釈になります。
さて、そのような言語が読者に役立つためには、彼が曖昧さに満足している必要があるか、またはあなたが彼にそれを解決する方法を与える必要があります。(この例では、あいまいさを解決する方法を提供していないため、あいまいさを喜んでいると判断しました!)。または、何かの読者にあいまいな構文解析を提供することができます。これは、どの構文解析が意味をなすかを選択する方法であり、彼は不適切な構文解析を拒否します。
上記の場合、私は「果物=>スイカ」を意味すると言うことでそれを行うことができます。
コンピューターの文法に違いはありませんが、ほとんどのプログラマーはあいまいなコードを望んでいません。したがって、一般的に、言語設計者は明確な文法を定義することを好みます。実際には、それらは成功せず、「これが曖昧に解釈される可能性がある場合は、このように解釈する」などの面白い言語規則が得られます。