Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Что такое Expression в ECMAScript? (https://javascript.ru/forum/misc/51990-chto-takoe-expression-v-ecmascript.html)

bes 28.11.2014 21:47

Что такое Expression в ECMAScript?
 
Кто-нибудь на форуме может ответить, что такое Expression с точки зрения спецификации?

http://www.ecma-international.org/ecma-262/5.1/
http://es5.javascript.ru/

krutoy 28.11.2014 22:07

Это с любой точки зрения всегда одно и то же -- выражение. Может ты имеешь в виду Function Expression?

bes 28.11.2014 23:43

Цитата:

Сообщение от krutoy
Это с любой точки зрения всегда одно и то же -- выражение. Может ты имеешь в виду Function Expression?

нет, я имею в виду, где его грамматическое определение в спецификации, хотя бы описание по старинке - словами в предложении

например, есть определение для PrimaryExpression
http://es5.javascript.ru/x11.html#x11.1
Цитата:

PrimaryExpression :
this
Identifier
Literal
ArrayLiteral
ObjectLiteral
( Expression )
перевожу: PrimaryExpression представляет собой либо this, либо Identifier, ..., либо последовательность, состоящую из левой круглой скобки, Expression и правой круглой скобки

далее есть, например, определение для Literal
http://es5.javascript.ru/x7.html#x7.8
Цитата:

Literal ::
NullLiteral
BooleanLiteral
NumericLiteral
StringLiteral
RegularExpressionLiteral
далее, есть, например, определение NullLiteral
Цитата:

NullLiteral ::
null
то есть мы полностью прошли цепочку, вплоть до символов, которые мы пишем в исходном коде

но что такое Expression?

Aetae 28.11.2014 23:47

Если утрировать: то что можно записать в одну строку без точки с запятой.)

bes 29.11.2014 00:05

Цитата:

Сообщение от Aetae
Если утрировать: то что можно записать в одну строку без точки с запятой.)

хорошо, допустим
Цитата:

Expression::
то что можно записать в одну строку без точки с запятой
можешь ткнуть носом, где об этом написано в спецификации, или как ты пришёл к такому выводу?

krutoy 29.11.2014 00:08

bes,
Тебе надо не спеки читать, а литературу по основам программирования.

bes 29.11.2014 00:19

Цитата:

Сообщение от krutoy
bes,
Тебе надо не спеки читать, а литературу по основам программирования.

ерунду не говори, спецификация eсmascript - строгий документ, в котором используются, в частности, контекстно-свободные грамматики, это означает, что любой нетерминал можно свести к последовательности терминалов, так как именно их совокупность передаётся на вход транслятору

http://es5.javascript.ru/x5.html#x5.1.1
Цитата:

Начиная с предложения, состоящего из одиночного помеченного нетерминала – начального символа, данная КС грамматика определяет язык, а именно – ряд (возможно, бесконечный) допустимых последовательностей терминальных символов, которые могут получиться в результате неоднократной замены какого-либо нетерминала в этой последовательности на символы, указанные в правой стороне правила, для которого этот нетерминал является левой частью.
если нет строгого определения, должно быть произвольное описание
если в данном случае это забыли сделать, то будет понятно


Цитата:

Сообщение от Aetae
Если утрировать: то что можно записать в одну строку без точки с запятой.)

а что можно записать в одну строку без точки с запятой?
именно это и определяется в спецификации: что можно, а что нельзя

krutoy 29.11.2014 00:21

Aetae,
На самом деле, Ваше определение не совсем корректно, даже, я бы сказал, совсем некорректно. Выражение -- это минимальная семантическая единица, все таки. Например, func(foo) содержит несколько подвыражений, которые разбираются отдельно.

krutoy 29.11.2014 00:25

Цитата:

Сообщение от bes
строгий документ, в котором используются, в частности, контекстно-свободные грамматики

Где используются, в документе? LOL

bes 29.11.2014 00:29

Цитата:

Сообщение от krutoy
Где используются, в документе? LOL

поясни или ты опять на своей волне
грамматика - это способ описания языка, где используется - не в пивнухе же

krutoy 29.11.2014 00:32

bes,
Ты слишком далек, чтобы обсуждать такие темы. Я пас.

bes 29.11.2014 00:36

Цитата:

Сообщение от krutoy
bes,
Ты слишком далек, чтобы обсуждать такие темы. Я пас.

:D

bes 29.11.2014 01:17

Цитата:

Сообщение от bes
если в данном случае это забыли сделать, то будет понятно

вероятно так оно и есть, так как в спецификации по java Expression определяется
думаю, что в основной своей массе, годно и для javascript

используется несколько иная нотация, чем в начале спецификации
ещё нужно вкуривать, но видно, что через цепочку Expression1 - Expression2 - Expression3 - Primary можно добраться до терминалов

http://docs.oracle.com/javase/specs/...ml/jls-18.html
Цитата:

The grammar below uses the following BNF-style conventions:
• [x] denotes zero or one occurrences of x.
• {x} denotes zero or more occurrences of x.
• (x | y) means one of either x or y.
Цитата:

Expression:
Expression1 [AssignmentOperator Expression1]

AssignmentOperator:
=
+=
-=
*=
/=
&=
|=
^=
%=
<<=
>>=
>>>=

Expression1:
Expression2 [Expression1Rest]

Expression1Rest:
? Expression : Expression1

Expression2:
Expression3 [Expression2Rest]

Expression2Rest:
{ InfixOp Expression3 }
instanceof Type


InfixOp:
||
&&
|
^
&
==
!=
<
>
<=
>=
<<
>>
>>>
+
-
*
/
%

Expression3:
PrefixOp Expression3
( (Expression | Type) ) Expression3
Primary { Selector } { PostfixOp }

PrefixOp:
++
--
!
~
+
-

PostfixOp:
++
--

Primary:
Literal
ParExpression
this [Arguments]
super SuperSuffix
new Creator
NonWildcardTypeArguments (ExplicitGenericInvocationSuffix | this Arguments)
Identifier { . Identifier } [IdentifierSuffix]
BasicType {[]} . class
void . class

bes 29.11.2014 01:40

пошёл было уже спать, но пришла светлая мысль распространить место, где найдено было это в спецификации java, на спецификацию ecmascript

http://www.ecma-international.org/ecma-262/5.1/#sec-A
Annex A
Цитата:

Expression :
AssignmentExpression
Expression , AssignmentExpression
теперь сон обещает быть спокойным :)

bes 29.11.2014 09:08

завершая начатое
http://www.ecma-international.org/ecma-262/5.1/#sec-A.3
http://es5.javascript.ru/A.html#A.3

Цитата:

Expression :
AssignmentExpression
Expression , AssignmentExpression

AssignmentExpression :
ConditionalExpression
LeftHandSideExpression = AssignmentExpression
LeftHandSideExpression AssignmentOperator AssignmentExpression

ConditionalExpression :
LogicalORExpression
LogicalORExpression ? AssignmentExpression : AssignmentExpression

LogicalORExpression :
LogicalANDExpression
LogicalORExpression || LogicalANDExpression

LeftHandSideExpression :
NewExpression
CallExpression

AssignmentOperator : one of
*= /= %= += -= <<= >>= >>>= &= ^= |=

....
логика помещения такой важной информации в приложение, которое должно носить информационный характер и объединять в себе в конспективном виде то, что описано в основной части стандарта, и которое должно было быть помещено в раздел про выражения, не понятна, но хотя бы есть

PS: :dance: :dance: :dance: пошёл :victory: :p :victory: отмечать :dance: :dance: :dance:

Gvozd 29.11.2014 11:31

Вложений: 2
Дуглас Крокфод. Javascript Сильные стороны
Под значение на первой диаграмме, полагаю подразумевается литерал, но перевели криво(диаграммы для значение нету)

http://javascript.ru/forum/attachmen...d=141724998 2
http://javascript.ru/forum/attachmen...d=141724998 2

bes 29.11.2014 13:51

Gvozd, переводы склонны к ошибкам, хотя бы потому, что англоязычные слова зачастую многозначны, чуть зазевался и перевёл другим словом, что при использовании грамматики недопустимо

PS: лично меня вполне устраивает используемая в спецификации нотация, по крайней мере, каких-то стрелочек и кружочков с прямоугольниками как в блок-схемах мне не нужно, также как и не нужно begin-end-ов, как в типа в более понятных языках для дебилов :)

bes 02.12.2014 19:32

Цитата:

Сообщение от bes
если в данном случае это забыли сделать, то будет понятно

выражения в основной части спецификации начинаются с объяснения того, как работает оператор запятая
логика для меня не понятна (и искать там интуиция вряд ли бы подсказала), так как можно было просто начать с определения Expression и дальше сводить его к терминалам

http://www.ecma-international.org/ec...5.1/#sec-11.14
http://es5.javascript.ru/x11.html#x11.14

Цитата:

11.14 Оператор 'Запятая' ( , ) # Ⓣ Ⓡ Ⓖ
Синтаксис
Expression :
AssignmentExpression
Expression , AssignmentExpression

ExpressionNoIn :
AssignmentExpressionNoIn
ExpressionNoIn , AssignmentExpressionNoIn


Часовой пояс GMT +3, время: 02:56.