私はJavaScript AST用のプリティプリンターを実装しています.演算子の優先順位と結合性に基づいて、最小限の括弧で式を自動的に括弧で囲む「適切な」アルゴリズムを誰かが知っているかどうか尋ねたいと思いました. Google で役立つ資料は見つかりませんでした。
明らかなことは、親の優先順位が高い演算子は括弧で囲む必要があるということです。たとえば、次のようになります。
(x + y) * z // x + y has lower precedence
ただし、結合しない演算子もいくつかあります。その場合は、括弧が必要です。次に例を示します。
x - (y - z) // both operators have the same precedence
この後者の場合の最良のルールは何だろうと思っています。除算と減算では、rhs 部分式の優先順位がそれ以下の場合は括弧で囲む必要があります。