2017-12-16 9 views
0

다음 사양 규칙을 혼동합니다. "AdditiveExpression"이 다른 "AdditiveExpression"및 "MultiplicativeExpression"으로 구성되어야하는 이유는 무엇입니까?ecmascript 사양의 구문에 혼동이 있음

다음 규칙에 따르면 왼쪽에서 "AdditiveExpression"을, 오른쪽에서 "MultiplicativeExpression"을 평가해야하지만 피연산자의 오른쪽이 평가 중이 아닌 경우 규칙에서 수행해야하는 작업은 무엇입니까? "MultiplicativeExpression"이 아니라 "AdditiveExpression"입니까?

Ecmascript Specification

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence – zabusa

+0

곱셈의 우선 순위가 더 높습니다. – QuentinUK

답변

3

구문은 +의 오른쪽 피연산자가 MultiplicativeExpression해야했다. 그렇지 않으면 구문 오류가 발생하고 아무 것도 평가되지 않습니다.

는 예를 들어, 식 1 + 2 + 3 이렇게 분석되어

  • 1PrimaryExpressionLiteral, 인 NumericLiteral이다.

  • PrimaryExpression

    MultiplicativeExpressionExponentiationExpression, 인 UnaryExpression, 인 UpdateExpression, 인 LeftHandSideExpression, 인 NewExpression, 인 MemberExpression이다.

  • MultiplicativeExpressionAdditiveExpression입니다.

  • +은 ... +입니다.

  • 2NumericLiteral이고, 위에 나열된 체인에 의해 MultiplicativeExpression이다.

  • 이 시점에서 AdditiveExpression : AdditiveExpression + MultiplicativeExpression (질문에서 인용 된) 규칙은 다음과 같습니다. 1 + 2AdditiveExpression으로 구문 분석됩니다.

  • +이 있으며 이는 단지 +입니다.

  • 3NumericLiteral이고, (위에 열거 된 쇄에 의해) MultiplicativeExpression이다.

  • 지금 AdditiveExpression : AdditiveExpression + MultiplicativeExpression은 (는 1 + 2MultiplicativeExpression되는 AdditiveExpression3 및 인으로) 다시 적용된다.

  • 모든 것이 이제 AdditiveExpression입니다.

+0

예를 보여 주시겠습니까? – YHSPY

+0

@YHSPY 오른쪽에 MultiplicativeExpression이없는'+'중? 물론,'2 +)'를 시도하십시오. 파이어 폭스에서'SyntaxError : expected expression, got ')''을 얻는다. – melpomene

+0

구문에 어떤 내용이 적용됩니까? 규칙에 따라 표현식이 "1 + 1 + 1"인 경우? – YHSPY

1

Why does the "AdditiveExpression" should consist of another "AdditiveExpression" and "MultiplicativeExpression"?

그래서 당신은 무기한 둥지 체인 첨가제 표현 할 수있는 : 1 + 1 + 1 + 1 + …

what should the rule do if the right side of the operand is not the evaluating of "MultiplicativeExpression" but a "AdditiveExpression"?

단지 발생하지 않습니다.1 + 1 + 1이라는 식은 1 + (1 + 1)이 아닌 (1 + 1) + 1 (오른쪽은 이고, 곱셈 식임)으로 구문 분석합니다.

The single number can be parsed as a "MultiplicativeExpression"?

예. 오른쪽에있는 단일 숫자 곱셈 표현 리프트 측의 단 수는 addititive expression이다 : 또한 UpdateExpressionUnaryExpression, 인 ExponentiationExpression, 인 multiplicative expression이다

AdditiveExpression[Yield, Await]: MultiplicativeExpression[?Yield, ?Await]

LeftHandSideExpression이고, 이고, MemberExpression이고, PrimaryExpression이고, 이고, 이는 NumericLiteral 렉서로 이루어져있다.

This kind of nesting은 JS 문법에서 연산자 우선 순위를 결정하는 방법입니다.

+0

단일 숫자를 "MultiplicativeExpression"으로 구문 분석 할 수 있습니까? 따라서 "1 + 1 + 2 * 2"라는 표현은 "AdditiveExpression + MultiplicativeExpression"과 같은 규칙처럼 "(1 + 1) + (2 * 2)"로 구문 분석됩니까? – YHSPY