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.