Является ли точка нотации оператором или чем-то еще?Откуда вы знаете? - PullRequest
4 голосов
/ 25 июня 2019

Я пытаюсь классифицировать токен «точка», используемый в точечной нотации (object.property).

Будучи разработчиком-самоучкой-любителем, в основном использующим JavaScript, я упростил (и, конечно, несовершенен)) понимание программирования и JavaScript.

При чтении кода я склонен классифицировать токены по пяти категориям:

  1. идентификаторы (+ зарезервированные ключевые слова)
  2. операторы
  3. разделители / знаки пунктуации
  4. litterals
  5. комментарии

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

Я рассматриваю это больше как бинарный оператор, который принимает два идентификатора и возвращает ссылку (это может быть разделитель?).Но мне так и не удалось найти источник, который четко это доказал.(Или, по крайней мере, это ясно подтверждает это и я могу понять).

Я посмотрел различные документы, в том числе спецификации ECMA.

Итак, вот два вопроса, которые у меня есть:

  • Где, по вашему мнению, я мог найти информацию, которую я ищу, или какие ключевые слова я мог бы использовать?
  • Что вы думаете о классификации точек в качестве токена?Бинарный оператор?Откуда ты знаешь?

Ответы [ 2 ]

2 голосов
/ 25 июня 2019

Если вы сосредоточены на чисто точечной нотации и более, если у вас в качестве примера используется JS, тогда это разделитель .

Конечно, он не применяется к каркасам или фигурам, которые добавляют функциональность,Например, структура, которая автоматизирует получение / установку вызовов для личных атрибутов или аналогичных.

Почему?Потому что точечная нотация является альтернативой нотации скобок или вверх ногами.И браслеты являются разделителем.thing['otherthing'] совпадает с thing.otherthing

1 голос
/ 25 июня 2019

Синтаксически, это постфиксный оператор. Возможно, было бы лучше назвать это семейством постфиксных операторов, по одному для каждого юридического идентификатора, который может следовать за ним.

Это похоже на индексную запись v[a], которая также лучше воспринимается синтаксически как постфиксный оператор (с разделителями), даже если у него два значения в качестве операндов. Таким же образом мы можем назвать так называемый троичный оператор cond ? alt1 : alt0 двоичным оператором с разделителями. Синтаксически, оператором является ? alt1:

Это представление о синтаксисе, которое на первый взгляд может показаться немного странным, происходит из описания грамматики оператора, которая в основном имеет вид, используя ⟨⟩ для группировки и * для необязательного повторения (т. Е. 0 или более экземпляры, как в регулярных выражениях).

⟨ PREFIX*  OPERAND POSTFIX* ⟩ ⟨ INFIX ⟨ PREFIX*  OPERAND POSTFIX* ⟩ ⟩*

Эта формулировка обрабатывает скобки, включая ( EXPRESSION ) в OPERAND (рекурсивно), для скобок - для группировки, и включая ( EXPRESSION_LIST ) в POSTFIX для скобок, используемых в вызовах функций.

Глядя на выражения таким образом, облегчает анализ. Это также помогает прояснить, что подразумевается под приоритетом и ассоциативностью, особенно для операторов с разделителями.

Общее правило приоритета операторов заключается в том, что мы начинаем с предоставления всем постфиксным операторам одинакового наивысшего приоритета. Это не является теоретически необходимым, но почти всегда приводит к ожидаемому значению. Никто не будет интерпретировать 2+sin(0.5) как вызов "функции" 2+sin. Более актуально для вашего вопроса: 2+s.size интуитивно означает, что .size сначала применяется к s, а затем к результату добавляется 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...