Hübscher Druck AST mit minimalen Klammern
Ich implementiere einen hübschen Drucker für einen JavaScript-AST und wollte fragen, ob jemand einen "richtigen" Algorithmus kennt, um Ausdrücke automatisch in Klammern mit minimalen Klammern zu setzen, basierend auf der Operatorpräzision undAssoziativität. Ich habe in Google kein nützliches Material gefunden.
Was offensichtlich erscheint, ist, dass ein Operator, dessen Elternteil eine höhere Priorität hat, in Klammern gesetzt werden sollte, z.
(x + y) * z // x + y has lower precedence
Es gibt jedoch auch einige Operatoren, die nicht assoziativ sind. In diesem Fall werden noch Klammern benötigt, z.
x - (y - z) // both operators have the same precedence
Ich frage mich, was die beste Regel für diesen letzteren Fall wäre. Ob es ausreicht zu sagen, dass für Division und Subtraktion der rhs-Unterausdruck in Klammern gesetzt werden sollte, wenn er weniger als hatoder gleich Vorrang.