1

한다고 가정 I JS 코드의 다음 부분을 가지고`ECMA 스크립트 문법에 Statement` '에서 파생 AssignmentExpression` 수있는 방법

나는 그것이 AssignmentExpression로서 해석 할 수 있습니다 알고있는 것처럼
const v = 3; 

:

AssignmentExpression : 
    LeftHandSideExpression = AssignmentExpression 

이제 Statement에서 어떻게 파생 될 수 있는지 궁금합니다. 한 가지 가능한 경로는 다음과 같습니다.

Statement -> ExpressionStatement -> Expression -> AssignmentExpression 

하지만 확실하지 않습니다. 맞습니까?

AssignmentExpression이 부분 Expression입니다 :

Expression : 
    AssignmentExpression 
    Expression, AssignmentExpression 

다음 ExpressionExpressionStatement의 일부

ExpressionStatement: 

    [lookahead ∉ { {, function, ..., let [ }] Expression; 

입니다 다음 ExpressionStatementStatement의 일부입니다 : 여기

내가 그것을 발견하는 방법입니다

Statement : 
    ExpressionStatement 
+3

첫째,'const를 V = 3;'**하지 ** 할당 표현이다. 그것은'const' 선언입니다. 초기화 부분 *은 대입 표현식처럼 보이지만 문법의 개별 부분입니다. – Pointy

+1

자바 스크립트 문법은 문법 구성의 시작 부분에 키워드와 토큰에 상당히 의존하며, 선언은 좋은 예입니다. 문장의 첫 번째 토큰이'const'이거나'let' 또는'var'이라면, 그것은 표현식이 아닌 선언입니다. – Pointy

+0

@ Pointy, 지적 해 주셔서 고맙습니다. 당신이 말하는 Const 선언은'LexicalDeclaration : LetOrConst BindingList'의 일부로 보입니다. 문법을 따라 간다면'StatementListItem -> Declaration -> LexicalDeclaration'을 사용해야한다. 답변으로 게시 할 수 있습니까? –

답변

2

const v = 3;은 할당이 아니라 선언입니다. 흥미롭게도 선언은 Statement이 아니지만 StatementList에 나타날 수 있습니다. 따라서 const v = 3;Statement에서 파생 할 수는 없지만 StatementList에서 파생시킬 수 있습니다. 만 const v = 3;를 포함하는 스크립트가있는 경우 그래서, 전체 유도는 다음과 같습니다

  Script 
       | 
      ScriptBody 
       | 
     StatementList 
       | 
     StatementListItem 
       | 
      Declaration 
       | 
     LexicalDeclaration 
    /  |  \ 
LetOrConst BindingList ';' 
    |   | 
'const' LexicalBinding 
      /  \ 
    BindingIdentifier Initializer 
      |    | 
     Identifier AssignmentExpression 
      |     | 
     IdentifierName   ... 
      |     | 
      'v'    '5' 

실제의 할당은 단지 v = 5; 될 것이다. 즉 ExpressionStatement를 통해 갈 것이라고 및 Statement의 유도는 다음과 같이 보일 것이다 :

     Statement 
         | 
       ExpressionStatement 
        /  \ 
        Expression ';' 
         | 
       AssignmentExpression 
      /  |   \ 
LeftHandSideExpression '=' AssignmentExpression 
     |       | 
    NewExpression    ... 
     |       | 
    MemberExpression    '5' 
     | 
    PrimaryExpression    
     | 
IdentifierReference 
     | 
    Identifier 
     | 
    IdentifierName 
     | 
     'v' 
+0

놀랍습니다. – Pointy

+0

그런 정교한 답변에 다시 한 번 감사드립니다! –

+0

당신 다이어그램에서 빠진'MemberExpression'을 추가 할 자유를 얻었습니다. 이 다이어그램은 큰 도움이됩니다. 나는이 나무 점들이 무엇인지 궁금해하고있다. –