Merge pull request #2988 from apense/patch-10
Added example for associativity
This commit is contained in:
commit
e5e479c12e
1 changed files with 12 additions and 5 deletions
|
|
@ -15,15 +15,22 @@ Associativity
|
||||||
Binary operators whose first character is ``^`` are right-associative, all
|
Binary operators whose first character is ``^`` are right-associative, all
|
||||||
other binary operators are left-associative.
|
other binary operators are left-associative.
|
||||||
|
|
||||||
|
.. code-block:: nim
|
||||||
|
proc `^/`(x, y: float): float =
|
||||||
|
# a right-associative division operator
|
||||||
|
result = x / y
|
||||||
|
echo 12 ^/ 4 ^/ 8 # 24.0 (4 / 8 = 0.5, then
|
||||||
|
12 / 0.5 = 24.0)
|
||||||
|
echo 12 / 4 / 8 # 0.375 (12 / 4 = 3.0, then
|
||||||
|
3 / 8 = 0.375)
|
||||||
|
|
||||||
Precedence
|
Precedence
|
||||||
----------
|
----------
|
||||||
|
|
||||||
Unary operators always bind stronger than any binary
|
Unary operators always bind stronger than any binary
|
||||||
operator: ``$a + b`` is ``($a) + b`` and not ``$(a + b)``.
|
operator: ``$a + b`` is ``($a) + b`` and not ``$(a + b)``.
|
||||||
|
|
||||||
If an unary operator's first character is ``@`` it is a `sigil-like`:idx:
|
If an unary operator's first character is ``@`` it is a `sigil-like`:idx:
|
||||||
operator which binds stronger than a ``primarySuffix``: ``@x.abc`` is parsed
|
operator which binds stronger than a ``primarySuffix``: ``@x.abc`` is parsed
|
||||||
as ``(@x).abc`` whereas ``$x.abc`` is parsed as ``$(x.abc)``.
|
as ``(@x).abc`` whereas ``$x.abc`` is parsed as ``$(x.abc)``.
|
||||||
|
|
||||||
|
|
@ -34,7 +41,7 @@ following rules:
|
||||||
Operators ending in either ``->``, ``~>`` or ``=>`` are called
|
Operators ending in either ``->``, ``~>`` or ``=>`` are called
|
||||||
`arrow like`:idx:, and have the lowest precedence of all operators.
|
`arrow like`:idx:, and have the lowest precedence of all operators.
|
||||||
|
|
||||||
If the operator ends with ``=`` and its first character is none of
|
If the operator ends with ``=`` and its first character is none of
|
||||||
``<``, ``>``, ``!``, ``=``, ``~``, ``?``, it is an *assignment operator* which
|
``<``, ``>``, ``!``, ``=``, ``~``, ``?``, it is an *assignment operator* which
|
||||||
has the second lowest precedence.
|
has the second lowest precedence.
|
||||||
|
|
||||||
|
|
@ -76,7 +83,7 @@ is still parsed as ``1 + (3 * 4)``, but ``1+3 * 4`` is parsed as ``(1+3) * 4``:
|
||||||
|
|
||||||
|
|
||||||
Furthermore whether an operator is used a prefix operator is affected by the
|
Furthermore whether an operator is used a prefix operator is affected by the
|
||||||
number of spaces:
|
number of spaces:
|
||||||
|
|
||||||
.. code-block:: nim
|
.. code-block:: nim
|
||||||
#! strongSpaces
|
#! strongSpaces
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue