New draft
This commit is contained in:
parent
4fc8ac64e7
commit
6c02b02d4a
149
README.adoc
149
README.adoc
@ -118,15 +118,20 @@ Numbers can be integers (GO int64) and float (GO float64). In mixed operations i
|
|||||||
|===
|
|===
|
||||||
| Symbol | Operation | Description | Examples
|
| Symbol | Operation | Description | Examples
|
||||||
|
|
||||||
| [blue]`+` / [blue]`-` | _change sign_ | Change the sign of values | [blue]`-1` _[-1]_, [blue]`-(+2)` _[-2]_
|
| [blue]`+` / [blue]`-` | _change sign_ | Change the sign of values | [blue]`-1` _[-1]_ +
|
||||||
|
[blue]`-(+2)` _[-2]_
|
||||||
|
|
||||||
| [blue]`+` | _sum_ | Add two values | [blue]`-1 + 2` _[1]_, [blue]`4 + 0.5` _[4.5]_
|
| [blue]`+` | _sum_ | Add two values | [blue]`-1 + 2` _[1]_ +
|
||||||
|
[blue]`4 + 0.5` _[4.5]_
|
||||||
|
|
||||||
| [blue]`-` | _subtracion_ | Subtract the right value from the left one | [blue]`3 - 1` _[2]_, [blue]`4 - 0.5` _[3.5]_
|
| [blue]`-` | _subtracion_ | Subtract the right value from the left one | [blue]`3 - 1` _[2]_ +
|
||||||
|
[blue]`4 - 0.5` _[3.5]_
|
||||||
|
|
||||||
| [blue]`*` | _product_ | Multiply two values | `-1 * 2` _[-2]_, [blue]`4 * 0.5` _[2.0]_
|
| [blue]`*` | _product_ | Multiply two values | `-1 * 2` _[-2]_ +
|
||||||
|
[blue]`4 * 0.5` _[2.0]_
|
||||||
|
|
||||||
| [blue]`/` | _Division_ | Divide the left value by the right one | [blue]`-1 / 2` _[0]_, [blue]`1.0 / 2` _[0.5]_
|
| [blue]`/` | _Division_ | Divide the left value by the right one | [blue]`-1 / 2` _[0]_ +
|
||||||
|
[blue]`1.0 / 2` _[0.5]_
|
||||||
|
|
||||||
| [blue]`./` | _Float division_ | Force float division | [blue]`-1 ./ 2` _[-0.5]_
|
| [blue]`./` | _Float division_ | Force float division | [blue]`-1 ./ 2` _[-0.5]_
|
||||||
|
|
||||||
@ -139,9 +144,21 @@ Strings are character sequences enclosed between two double quote [blue]`"`. Exa
|
|||||||
|
|
||||||
Some arithmetic operators can also be used with strings.
|
Some arithmetic operators can also be used with strings.
|
||||||
|
|
||||||
|
.String operators
|
||||||
|
[cols="^1,^2,6,4"]
|
||||||
|
|===
|
||||||
|
| Symbol | Operation | Description | Examples
|
||||||
|
|
||||||
|
| [blue]`+` | _concatenation_ | Join to strings or _stringable_ values | [blue]`"one" + "two"` _["onetwo"]_ +
|
||||||
|
[blue]`"one" + 2` _["one2"]_
|
||||||
|
|
||||||
|
| [blue]`*` | _repeat_ | Make _n_ copy of a string | [blue]`"one" * 2` _["oneone"]_
|
||||||
|
|
||||||
|
|===
|
||||||
|
|
||||||
|
|
||||||
==== Boolean
|
==== Boolean
|
||||||
Boolean data type has two values only: _true_ and _false_. Relational and Boolean expressions produce a Boolean values.
|
Boolean data type has two values only: _true_ and _false_. Relational and Boolean expressions produce Boolean values.
|
||||||
|
|
||||||
|
|
||||||
.Relational operators
|
.Relational operators
|
||||||
@ -149,23 +166,123 @@ Boolean data type has two values only: _true_ and _false_. Relational and Boolea
|
|||||||
|===
|
|===
|
||||||
| Symbol | Operation | Description | Examples
|
| Symbol | Operation | Description | Examples
|
||||||
|
|
||||||
| [blue]`==` | _Equal_ | True if the left value is equal to the right one | [blue]`5 == 2` _[false]_, [blue]`"a" == "a"` [true]
|
| [blue]`==` | _Equal_ | True if the left value is equal to the right one | [blue]`5 == 2` _[false]_ +
|
||||||
| [blue]`!=` | _Not Equal_ | True if the left value is NOT equal to the right one | [blue]`5 != 2` _[true]_, [blue]`"a" != "a"` [false]
|
[blue]`"a" == "a"` _[true]_
|
||||||
| [blue]`<` | _Less_ | True if the left value is less than the right one | [blue]`5 < 2` _[false]_, [blue]`"a" < "b"` [true]
|
| [blue]`!=` | _Not Equal_ | True if the left value is NOT equal to the right one | [blue]`5 != 2` _[true]_ +
|
||||||
| [blue]`\<=` | _Less or Equal_ | True if the left value is less than or equal to the right one | [blue]`5 \<= 2` _[false]_, [blue]`"b" \<= "b"` [true]
|
[blue]`"a" != "a"` _[false]_
|
||||||
| [blue]`>` | _Greater_ | True if the left value is greater than the right one | [blue]`5 > 2` _[true]_, [blue]`"a" < "b"` [false]
|
| [blue]`<` | _Less_ | True if the left value is less than the right one | [blue]`5 < 2` _[false]_ +
|
||||||
| [blue]`>=` | _Greater or Equal_ | True if the left value is greater than or equal to the right one | [blue]`5 >= 2` _[true]_, [blue]`"b" \<= "b"` [true]
|
[blue]`"a" < "b"` _[true]_
|
||||||
|
| [blue]`\<=` | _Less or Equal_ | True if the left value is less than or equal to the right one | [blue]`5 \<= 2` _[false]_ +
|
||||||
|
[blue]`"b" \<= "b"` _[true]_
|
||||||
|
| [blue]`>` | _Greater_ | True if the left value is greater than the right one | [blue]`5 > 2` _[true]_ +
|
||||||
|
[blue]`"a" < "b"` _[false]_
|
||||||
|
| [blue]`>=` | _Greater or Equal_ | True if the left value is greater than or equal to the right one | [blue]`5 >= 2` _[true]_ +
|
||||||
|
[blue]`"b" \<= "b"` _[true]_
|
||||||
|===
|
|===
|
||||||
|
|
||||||
|
|
||||||
.Boolean operators
|
.Boolean operators
|
||||||
[cols="^2,^2,6,4"]
|
[cols="^2,^2,5,4"]
|
||||||
|===
|
|===
|
||||||
| Symbol | Operation | Description | Examples
|
| Symbol | Operation | Description | Examples
|
||||||
|
|
||||||
| [blue]`NOT` | _Not_ | True if the right value is false | [blue]`NOT true` _[false]_, [blue]`NOT (2 < 1)` _[true]_
|
| [blue]`NOT` | _Not_ | True if the right value is false | [blue]`NOT true` _[false]_ +
|
||||||
|
[blue]`NOT (2 < 1)` _[true]_
|
||||||
|
|
||||||
| [blue]`AND` / [blue]`&&` | _And_ | True if both left and right values are true | [blue]`false && true` _[false]_, [blue]`"a" < "b" AND NOT (2 < 1)` _[true]_
|
| [blue]`AND` / [blue]`&&` | _And_ | True if both left and right values are true | [blue]`false && true` _[false]_ +
|
||||||
|
[blue]`"a" < "b" AND NOT (2 < 1)` _[true]_
|
||||||
|
|
||||||
| [blue]`OR` / [blue]`\|\|` | _Or_ | True if at least one of the left and right values integers true| [blue]`false or true` _[true]_, [blue]`"a" == "b" OR (2 == 1)` _[false]_
|
| [blue]`OR` / [blue]`\|\|` | _Or_ | True if at least one of the left and right values integers true| [blue]`false or true` _[true]_ +
|
||||||
|
[blue]`"a" == "b" OR (2 == 1)` _[false]_
|
||||||
|===
|
|===
|
||||||
|
|
||||||
|
[CAUTION]
|
||||||
|
====
|
||||||
|
Currently, boolean operations are evaluated using _short cut evaluation_. This means that, if the left expression of operators [blue]`and` and [blue]`or` is sufficient to establish the result of the whole operation, the right expression would not evaluated at all.
|
||||||
|
|
||||||
|
.Example
|
||||||
|
[source,go]
|
||||||
|
----
|
||||||
|
2 > (a=1) or (a=8) > 0; a // <1>
|
||||||
|
----
|
||||||
|
<1> This multi-expression returns _1_ because in the first expression the left value of [blue]`or` is _true_ and as a conseguence its right value is not computed. Therefore the _a_ variable only receives the integer _1_.
|
||||||
|
====
|
||||||
|
|
||||||
|
==== List
|
||||||
|
#TODO: List operations#
|
||||||
|
|
||||||
|
=== Variables
|
||||||
|
#TODO: List operations#
|
||||||
|
|
||||||
|
=== Other operations
|
||||||
|
|
||||||
|
==== [blue]`;` operator
|
||||||
|
The semicolon operator [blue]`;` is an infixed operator. It evaluates the left expression first and then the right expression. The latter is the final result.
|
||||||
|
|
||||||
|
IMPORTANT: Technically [blue]`;` is not treated as a real operator. Its role is as an expression separator in an expression list.
|
||||||
|
|
||||||
|
[blue]`;` can be used to set some variables before the final calculation.
|
||||||
|
|
||||||
|
.Example
|
||||||
|
[source,go]
|
||||||
|
----
|
||||||
|
a=1; b=2; c=3; a+b+c // returns 6
|
||||||
|
----
|
||||||
|
|
||||||
|
==== [blue]`but` operator
|
||||||
|
[blue]`but` is an infixed operator. Its operands can be any type of expression. It evaluates the left expression first, then the right expression. The value of the right expression is the final result. Examples: [blue]`5 but 2` returns 2, [blue]`x=2*3 but x-1` returns 5.
|
||||||
|
|
||||||
|
[blue]`but` is very similar to [blue]`;`. The only difference is that [blue]`;` can't be used inside parenthesis.
|
||||||
|
|
||||||
|
==== Assignment operator [blue]`=`
|
||||||
|
The assignment operator [blue]`=` is used to define variable in the context or to change their value.
|
||||||
|
The value on the left side of [blue]`=` must be an identifier. The value on the right side can be any expression and it becomes the result of the assignment operation.
|
||||||
|
|
||||||
|
=== Priorities of operators
|
||||||
|
The table below shows all supported operators by decreasing priorities.
|
||||||
|
|
||||||
|
.Operators priorities
|
||||||
|
[cols="^2,^2,^2,^5,<5"]
|
||||||
|
|===
|
||||||
|
| Priority | Operators | Position | Operation | Operands and results
|
||||||
|
|
||||||
|
1+|*FACT*| [blue]`!` | _Postfix_ | _Factorial_| _integer_ "!" -> _integer_
|
||||||
|
1+|*SIGN*| [blue]`+`, [blue]`-` | _Prefix_ | _Change-sign_| ("+"\|"-") _number_ -> _number_
|
||||||
|
.5+|*PROD*| [blue]`*` | _Infix_ | _Product_ | _number_ "*" _number_ -> _number_
|
||||||
|
| [blue]`*` | _Infix_ | _String-repeat_ | _string_ "*" _integer_ -> _string_
|
||||||
|
| [blue]`/` | _Infix_ | _Division_ | _number_ "/" _number_ -> _number_
|
||||||
|
| [blue]`./` | _Infix_ | _Float-division_ | __number__ "./" _number_ -> _float_
|
||||||
|
| [blue]`%` | _Infix_ | _Integer-remainder_ | _integer_ "%" _integer_ -> _integer_
|
||||||
|
.5+|*SUM*| [blue]`+` | _Infix_ | _Sum_ | _number_ "+" _number_ -> _number_
|
||||||
|
| [blue]`+` | _Infix_ | _String-concat_ | (_string_\|_number_) "+" (_string_\|_number_) -> _string_
|
||||||
|
| [blue]`+` | _Infix_ | _List-join_ | _list_ "+" _list_ -> _list_
|
||||||
|
| [blue]`-` | _Infix_ | _Subtraction_ | _number_ "-" _number_ -> _number_
|
||||||
|
| [blue]`-` | _Infix_ | _List-difference_ | _list_ "-" _list_ -> _list_
|
||||||
|
.6+|*RELATION*| [blue]`<` | _Infix_ | _less_ | _comparable_ "<" _comparable_ -> _boolean_
|
||||||
|
| [blue]`\<=` | _Infix_ | _less-equal_ | _comparable_ "\<=" _comparable_ -> _boolean_
|
||||||
|
| [blue]`>` | _Infix_ | _greater_ | _comparable_ ">" _comparable_ -> _boolean_
|
||||||
|
| [blue]`>=` | _Infix_ | _greater-equal_ | _comparable_ ">=" _comparable_ -> _boolean_
|
||||||
|
| [blue]`==` | _Infix_ | _equal_ | _comparable_ "==" _comparable_ -> _boolean_
|
||||||
|
| [blue]`!=` | _Infix_ | _not-equal_ | _comparable_ "!=" _comparable_ -> _boolean_
|
||||||
|
.1+|*NOT*| [blue]`not` | _Prefix_ | _not_ | "not" _boolean_ -> _boolean_
|
||||||
|
.2+|*AND*| [blue]`and` | _Infix_ | _and_ | _boolean_ "and" _boolean_ -> _boolean_
|
||||||
|
| [blue]`&&` | _Infix_ | _and_ | _boolean_ "&&" _boolean_ -> _boolean_
|
||||||
|
.2+|*OR*| [blue]`or` | _Infix_ | _or_ | _boolean_ "or" _boolean_ -> _boolean_
|
||||||
|
| [blue]`||` | _Infix_ | _or_ | _boolean_ "||" _boolean_ -> _boolean_
|
||||||
|
.1+|*ASSIGN*| [blue]`=` | _Infix_ | _assignment_ | _identifier_ "=" _any_ -> _any_
|
||||||
|
.1+|*BUT*| [blue]`but` | _Infix_ | _but_ | _any_ "but" _any_ -> _any_
|
||||||
|
|===
|
||||||
|
|
||||||
|
=== Functions
|
||||||
|
|
||||||
|
==== Function calls
|
||||||
|
#TODO: List operations#
|
||||||
|
|
||||||
|
==== Function definitions
|
||||||
|
#TODO: List operations#
|
||||||
|
|
||||||
|
==== Builtins
|
||||||
|
#TODO: List operations#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user