Javascript JS中的计算顺序
我所在的大学codeboot.org构建的解释器提供了表达式的逐步执行。因此,我能够看到程序如何读取算术表达式。这就是我开始困惑的地方 例如,此表达式:10-5+(7+2)/3 我们总是说,我们应该计算括号中的表达式,因此,这就是我所期望的顺序Javascript JS中的计算顺序,javascript,interpreter,Javascript,Interpreter,我所在的大学codeboot.org构建的解释器提供了表达式的逐步执行。因此,我能够看到程序如何读取算术表达式。这就是我开始困惑的地方 例如,此表达式:10-5+(7+2)/3 我们总是说,我们应该计算括号中的表达式,因此,这就是我所期望的顺序 7+2=9,9/3=3,10-5=5,5+3=8 然而,解释器执行的是完全不同的 10-5=5,7+2=9,9/3=3,5+3=8 虽然结果是一样的,但为什么要先计算10-5呢?“我们必须先计算括号里的东西”会发生什么?这让我很困惑 我想知道这是
- 7+2=9,9/3=3,10-5=5,5+3=8
- 10-5=5,7+2=9,9/3=3,5+3=8
- 1+4=5,5*6=30
10-5+(7+2)/3
将生成大致如下的树:
AdditiveExpression:
AdditiveExpression
AdditiveExpression
MultiplicativeExpression
... NumericLiteral 10
- -
MultiplicativeExpression
... NumericLiteral 5
+ +
MultiplicativeExpression
MultiplicativeExpression
... ParenthesizeExpression
( (
Expression
... AdditiveExpression 7+2
) )
MultiplicativeOperator /
ExponentiationExpression
... NumericLiteral 3
其中:
- 我用缩进来表达嵌套李>
- 当我省略了很多中间派生词时,我使用了“…”;及
- 我还没有费心给出“7+2”的完整子树
AdditiveExpression
,其子级是:
- 另一个
(对于附加表达式
)10-5
标记,以及+
- a
(对于乘法表达式
)(7+2)/3
- (a) 计算左操作数,然后
- (b) 那么,对吗
- (c) 对结果执行加法运算
10-5=>5
是解释器计算的第一件事
接下来是(b)计算(7+2)/3
的乘法表达式。这里的规则类似,因此我们需要:
- (b1)计算左操作数(
)的乘法表达式),然后(7+2)
- (b2)计算右操作数(3的求幂表达式),然后
- (b3)执行乘法运算符
指示的操作/
7+2=>9
是下一件事
然后(b2)3=>3
然后(b3)9/3=>3
我们现在已经完成了步骤(b),所以我们继续(c)5+3=>8
这与解释器执行的一系列计算相匹配。加法也是可传递的。@DanielA.White我怀疑他不需要那个引用,它似乎是解释器的问题,而不是javascript的问题,标题不能正确地表达这个问题。当我看了一眼,我发现帕伦斯和赛区对第一部分没有影响,所以我先打了10-5。。。。。。可能是解释器所做的我发现解释器总是从左到右,然后计算它能首先计算的任何东西。不是我们所想的,而是直接开始计算括号。哦,非常感谢,我应该问她,而不是我的教授,他甚至不能详细解释哈哈。这让一切变得如此清晰!!!!你知道我在哪里可以找到可以显示解析树的解释器吗?因为在你解释之前我甚至不知道这是一个东西,这里不是一个解释器,但它会向你展示,对于给定的JavaScript代码块,15个不同的JavaScript解析器生成的AST(抽象语法树)。(它还支持许多其他语言。)非常感谢!