Довольно печать AST с минимальными скобками
Я реализую симпатичный принтер для JavaScript AST, и я хотел бы спросить, знает ли кто-нибудь о «правильном» алгоритме, который автоматически заключает в скобки выражения с минимальными скобками на основе приоритета оператора иассоциативность, Я не нашел ни одного полезного материала в Google.
Очевидно, что оператор, родитель которого имеет более высокий приоритет, должен быть заключен в скобки, например:
(x + y) * z // x + y has lower precedence
Однако есть также некоторые операторы, которые не являются ассоциативными, и в этом случае скобки все еще необходимы, например:
x - (y - z) // both operators have the same precedence
Мне интересно, что было бы лучшим правилом для этого последнего случая. Достаточно ли сказать, что для деления и вычитания подвыражение rhs должно быть заключено в скобки, если оно меньшеили равно старшинство.