Merge pull request #2988 from apense/patch-10

Added example for associativity
This commit is contained in:
reactormonk 2015-06-25 01:21:10 -05:00
commit e5e479c12e

View file

@ -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