Linda impresión AST con paréntesis mínimos

Estoy implementando una impresora bonita para un AST de JavaScript y quería preguntar si alguien está al tanto de un algoritmo "apropiado" para paréntesis de expresiones con paréntesis mínimos en función de la precedencia del operador yasociatividad. No he encontrado ningún material útil en el google.

Lo que parece obvio es que un operador cuyo padre tenga una mayor prioridad debe estar entre paréntesis, por ejemplo:

(x + y) * z // x + y has lower precedence

Sin embargo, también hay algunos operadores que no son asociativos, en cuyo caso todavía se necesitan paréntesis, por ejemplo:

x - (y - z) // both operators have the same precedence

Me pregunto cuál sería la mejor regla para este último caso. Si es suficiente decir que para la división y la resta, la sub-expresión de rhs debe estar entre paréntesis si tiene menos deo igual precedencia.