2017-03-14 12 views
2

Je suis en train de prouver qu'un simple appel de fonction telle queUne fonction JavaScript appelle-t-elle LeftHandSideExpression, donc ExpressionStatement?

window.alert(); 

est valide EcmaScript 2016 (7e édition) de grammaire. En travaillant en arrière, avec l'attente c'est un ExpressionStatement, je vois qu'il correspond au modèle MemberExpression Arguments qui est un CallExpression. Et, section 12.3 définit LeftHandSideExpression comme éventuellement un CallExpression. Maintenant, mon problème est que l'article 12,15AssignmentExpression semble exiger que LeftHandSideExpression être suivie soit par un AssignmentExpression ou un AssignmentOperator et AssignmentExpression ne peut pas être ;

Il me manque probablement quelque chose de simple. La direction sera grandement appréciée.

Répondre

6

Un AssignmentExpression n'a pas nécessairement besoin d'être une affectation, cela signifie seulement "une affectation peut rester ici". Il peut également être composé uniquement de ConditionalExpression. Et maintenant, nous devons descendre toute la chaîne des règles d'associativité:
Un ConditionalExpression peut contenir un opérateur ternaire ou consister uniquement en un LogicalORExpression. Un LogicalORExpression peut contenir un opérateur || ou être composé uniquement d'un LogicalANDExpression. Et ainsi de suite: Un LogicalANDExpression peut consister uniquement en un BitwiseORExpression qui peut consister uniquement un BitwiseXORExpression qui peut consister uniquement un BitwiseANDExpression qui peut consister uniquement un EqualityExpression qui peut consister uniquement un RelationalExpression qui peut consister uniquement un ShiftExpression qui peut consister de seulement AdditiveExpression qui peut consister uniquement en un MultiplicativeExpression qui peut consister uniquement en un ExponentiationExpression qui peut consister uniquement en un UnaryExpression qui peut consister uniquement en un UpdateExpression.

Qui peut finalement se composer du LeftHandSideExpression que nous nous occupions.

+0

Merci, Bergi. Mais UpdateExpression * ne nécessite-t-il pas que l'opérateur d'incrémentation ou de décrémentation suive * LeftHandSideExpression *? – Matthias

+0

@Matthias Non, juste 'LeftHandSideExpression' est la première des cinq options, donc il n'en a pas besoin. – Xufox

+0

** 12,4 ** Je le vois maintenant! Merci mes amis! – Matthias