Assegnazione letterale nella specifica di ECMAScript 2017

0

Sto cercando di creare un albero di derivazione per il programma

x = 42

utilizzando le specifiche per ECMAScript 2017. Vedo che c'è un AssignmentExpression che ha la regola di produzione:

LeftHandExpression = AssignmentExpression

tuttavia, non vedo alcuna regola che consenta a AssignmentExpression di essere un valore letterale.

Forse sto cercando nel posto sbagliato, ma AssignmentExpression sembra essere l'unica scelta ragionevole.

La regola di produzione per AssignmentExpression è qui: link

    
posta David Poxon 17.03.2018 - 07:54
fonte

2 risposte

3

La grammatica ECMAScript è molto complessa. Codifica esplicitamente la precedenza degli operatori attraverso varie regole grammaticali. Ciò significa che una regola di grammatica non si adatta solo a quell'operatore specifico, ma anche a tutte le espressioni che hanno una precedenza più alta di questo operatore. In genere, questa sarà la prima alternativa.

La derivazione da AssignmentExpression a Literal è questa, con nomi a volte fuorvianti per le regole:

  1. AssignmentExpression (12.15)
  2. ConditionalExpression (12.14)
  3. LogicalORExpression (12.13)
  4. LogicalANDExpression (12.13)
  5. BitwiseORExpression (12.12)
  6. BitwiseXORExpression (12.12)
  7. BitwiseANDExpression (12.12)
  8. EqualityExpression (12.11)
  9. RelationalExpression (12.10)
  10. ShiftExpression (12.9)
  11. AdditiveExpression (12.8)
  12. MultiplicativeExpression (12.7)
  13. ExponentiationExpression (12.6)
  14. UnaryExpression (12.5)
  15. UpdateExpression (12.4)
  16. LeftHandSideExpression (12.3)
  17. NewExpression (12.3)
  18. MemberExpression (12.3)
  19. PrimaryExpression (12.2)
  20. Letterale (12.2.4)

Il passaggio a queste regole grammaticali può a volte creare confusione perché la grammatica consente una sintassi strana come "foo" += 3 . Tuttavia, la specifica contiene un insieme di semantica statica che decide se una determinata sintassi rappresenta un obiettivo di assegnazione valido. Quindi non tutte le LeftHandSideExpressions sono consentite sul lato sinistro di un incarico!

    
risposta data 17.03.2018 - 11:54
fonte
1

Non trovo le specifiche 2017 in questo momento, ma le specifiche 2019 hanno chiaramente altre alternative nella regola AssignmentExpression, una delle quali in definitiva produce tramite un percorso piuttosto lungo di regole di produzione letterale, come previsto. Non posso immaginare che la versione 2017 sia molto diversa in questo senso.

Aggiornamento: dopo ulteriori ricerche ho trovato link che cita solo parti della specifica Se guardi che invece di una specifica ufficiale, non vedi la regola di produzione completa ...

    
risposta data 17.03.2018 - 08:12
fonte

Leggi altre domande sui tag