Pretty Printing AST z minimalnymi nawiasami

Wdrażam ładną drukarkę dla JavaScript AST i chciałem zapytać, czy ktoś wie o „właściwym” algorytmie do automatycznego nawiasowania wyrażeń z minimalnymi nawiasami w oparciu o pierwszeństwo operatora iasocjatywność. Nie znalazłem żadnych przydatnych materiałów w Google.

Wydaje się oczywiste, że operator, którego rodzic ma wyższy priorytet, powinien być nawiasowany, np .:

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

Istnieją jednak również niektóre operatory, które nie są asocjacyjne, w którym to przypadku nawiasy są nadal potrzebne, np .:

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

Zastanawiam się, jaka byłaby najlepsza zasada dla tego ostatniego przypadku. Czy wystarczy powiedzieć, że dla podziału i odejmowania, podwyrażenie rhs powinno być nawiasowane, jeśli ma mniej niżlub równe precedens.

questionAnswers(3)

yourAnswerToTheQuestion