Skip to content

Commit 58a414f

Browse files
committed
Reword the OP section once again
1 parent 9a23017 commit 58a414f

File tree

1 file changed

+47
-64
lines changed

1 file changed

+47
-64
lines changed

Doc/reference/lexical_analysis.rst

Lines changed: 47 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1353,78 +1353,61 @@ Formally, imaginary literals are described by the following lexical definition:
13531353

13541354
.. _delimiters:
13551355
.. _operators:
1356+
.. _lexical-ellipsis:
13561357

13571358
Operators and delimiters
13581359
========================
13591360

1360-
.. index:: single: operators
1361-
1362-
The following tokens are :dfn:`operators` -- they are used to combine
1363-
:ref:`expressions <expressions>`.
1364-
1365-
.. code-block:: none
1366-
1367-
1368-
+ - * ** / // %
1369-
<< >> & | ^ ~
1370-
< > <= >= == !=
1371-
. @ :=
1372-
1373-
Plus (``+``) and minus (``-``) signs can also occur in
1374-
:ref:`floating-point <floating>` and :ref:`imaginary` literals.
1375-
1376-
.. index:: single: delimiters
1377-
1378-
The following tokens are :dfn:`delimiters` -- simple tokens that
1379-
are not operators:
1380-
1381-
.. code-block:: none
1382-
1383-
( ) [ ] { }
1384-
, : ! ; = ->
1385-
. @
1386-
1387-
The period (``.``) and at-sign (``@``) can serve either as operators
1388-
or delimiters.
1389-
1390-
The period can also occur in :ref:`floating-point <floating>` and
1391-
:ref:`imaginary` literals.
1392-
1393-
The symbols ``{``, ``}``, ``!`` and ``:`` have special meaning in
1394-
:ref:`formatted string literals <f-strings>` and
1395-
:ref:`template string literals <t-strings>`.
1396-
1397-
.. _lexical-ellipsis:
1398-
1399-
A sequence of three periods (without whitespace between them) has a special
1400-
meaning as an :py:data:`Ellipsis` literal:
1401-
1402-
.. code-block:: none
1403-
1404-
...
1361+
.. index::
1362+
single: operators
1363+
single: delimiters
14051364

1406-
The following tokens are :ref:`augmented assignment <augassign>` operators:
1407-
they serve lexically as delimiters, but also perform an operation:
1365+
The following grammar defines :dfn:`operator` and :dfn:`delimiter` tokens,
1366+
that is, the generic :data:`~token.OP` token type:
14081367

1409-
.. code-block:: none
1368+
.. grammar-snippet::
1369+
:group: python-grammar
14101370

1411-
+= -= *= **= /= //= %=
1412-
<<= >>= &= |= ^= @=
1371+
OP:
1372+
| arithmetic_operator
1373+
| bitwise_operator
1374+
| comparison_operator
1375+
| enclosing_delimiter
1376+
| other_delimiter
1377+
| assignment_operator
1378+
| other_op
1379+
| "..."
1380+
1381+
arithmetic_operator: "+" | "-" | "*" | "**" | "/" | "//" | "%"
1382+
bitwise_operator: "&" | "^" | "~" | "<<" | ">>"
1383+
assignment_operator: "+=" | "-=" | "*=" | "**=" | "/=" | "//=" | "%=" |
1384+
"&=" | "|=" | "^=" | "<<=" | ">>=" | "@=" | ":="
1385+
comparison_operator: "<" | ">" | "<=" | ">=" | "==" | "!="
1386+
enclosing_delimiter: "(" | ")" | "[" | "]" | "{" | "}"
1387+
other_delimiter: "," | ":" | "!" | ";" | "=" | "->"
1388+
other_op: "." | "@"
1389+
1390+
.. note::
1391+
1392+
Generally, *operators* are used to combine :ref:`expressions <expressions>`,
1393+
while *delimiters* serve other purposes.
1394+
However, there is no clear, formal distinction between the two categories.
1395+
1396+
Some tokens can serve as either operators or delimiters, depending on usage.
1397+
For example, ``*`` is both the multiplication operator and a delimiter used
1398+
for sequence unpacking, and ``@`` is both the matrix multiplication and
1399+
a delimiter that introduces decorators.
1400+
1401+
For some tokens, the distinction is unclear.
1402+
For example, some people consider ``. ( )`` to be delimiters, while others
1403+
see the :py:func:`getattr` operator and the function call operator(s).
1404+
1405+
Some of Python's operators, like ``and``, ``or``, and ``not in``, use
1406+
:ref:`keyword <keywords>` tokens rather than "symbols" (operator tokens).
1407+
1408+
A sequence of three consecutive periods (``...``) has a special
1409+
meaning as an :py:data:`Ellipsis` literal.
14131410

14141411
See :ref:`operator and delimiter tokens <token_operators_delimiters>`
14151412
in the :mod:`!token` module documentation for names of the operator and
14161413
delimiter tokens.
1417-
1418-
The following printing ASCII characters have special meaning as part of other
1419-
tokens or are otherwise significant to the lexical analyzer:
1420-
1421-
.. code-block:: none
1422-
1423-
' " # \
1424-
1425-
The following printing ASCII characters are not used in Python. Their
1426-
occurrence outside string literals and comments is an unconditional error:
1427-
1428-
.. code-block:: none
1429-
1430-
$ ? `

0 commit comments

Comments
 (0)