如何基于AST与运算符优先级序列化无括号的二元表达式
从AST判断二元表达式序列化时是否省略括号
以下两个表达式均会被解析为二元表达式:
3 - (4 + 5) 3 - (4 * 5)
当仅给定AST时,如何判断第二个表达式在序列化为字符串时可以省略括号?是否需要依赖运算符优先级?
例如,3 - (4 + 5)对应的AST结构如下:
{ type: BinaryExpression, left: { type: Literal, value: 3, }, operator: '-', right: { type: BinaryExpression, left: { type: Literal, value: 4, }, operator: '+', right: { type: Literal, value: 5, } } };
3 - (4 * 5)的AST结构与上述完全一致,仅内部BinaryExpression的运算符不同。
-和+的运算符优先级相同,而*的优先级更高。那么是否可以通过判断父子运算符的优先级差异来决定是否省略括号?
示例代码如下:
const parentBinaryExpPrecedence = getPrecedence(expression.operator) const childBinaryExpPrecedence = getPrecedence(expression.right.operator) const dropParentheses = parentBinaryExpPrecedence !== childBinaryExpPrecedence
内容的提问来源于stack exchange,提问作者Max Koretskyi
相关产品推荐
相关产品推荐

