---
name: "flx_op"
section: "1"
platform: "linux"
package: "felix"
version: "1.1.1-2+b1"
release: "Debian 4.0 (Etch)"
platforms: ["linux"]
url: "https://new.carta.tech/flx_op"
---

# flx\_op(1)

## NAME

Felix operators and operator names (these need to be checked!).

A chainable binary operator such as + creates a list of subexpressions.

## assignment

Assignment operators are sugar for statements, so only one is allowed.

**= asgn**\
 **\<- asgn**\
 **:= initialise new val**\
 **+= pluseq**\
 **-= minuseq**\
 **\*= muleq**\
 **/= diveq**\
 **%= modeq**\
 **\|= oreq**\
 **^= xoreq**\
 **&= andeq**\

## let/in

**let \<expr\> in \<expr\>** prefix\

## tuple

**, chain**\

## logic

Note that "shortcut" doesn't apply in Felix since expressions are purely functional.

**\|\| lor** chain\
 **&& land** chain\
 **! lnot** prefix\

## comparison

**== eq** binary\
 **\<= le** chain\
 **\< lt** chain\
 **\>= ge** chain\
 **\> gt** chain\
 **\<\> ne** chain\
 **!= ne** chain\

**-\> arrow** left assoc\

**case \<int\> of \<int\>** unassoc\

## numeric

Note that + has a lower precedence than -, and \* has a lower precedence than / which is unusual.

**- sub** left assoc\
 **+ add** chain\
 **\* mul** chain\
 **/ div** left assoc\
 **% mod** left assoc\
 **- sub** prefix\
 **+ sub** prefix\
 **\*\*** pow right (special prec rules)\

## addressing

**&** prefix\
 **\*** prefix\

## bitwise

**\| bor** chain\
 **^ xor** chain\
 **& band** chain\
 **~ bnot** prefix\

## application

**(juxtaposition)** left assoc

## coercion

**:** left assoc

## component

**.** left assoc\

## qualified name

**::** left assoc\

## suffixed name

**of** left assoc

## atomic

**if/then/else/endif**\

**match \<expr\> with**\
 **\| \<pattern\> =\> \<expr\>**\
 **...**\
 **endmatch**\

**regmatch \<expr\> with**\
 **\| \<regexp\> =\> \<expr\>**\
 **...**\
 **endmatch**\

**(fun (\<arglist\>):\<type\> = { \<expr\> })**\
 **(fun (\<arglist\>):\<type\> = { \<statements\> })**\
 **{ \<expr\> }**\
 Lambda function. The return type is optional. The third form is short for **(fun () = { \<expr\> })**\

**(proc (\<arglist\>){ \<statements\> })**\
 **{ \<statements\> }**\
 Lambda procedure. The second form is short for **(proc () = { \<statements\> })**\

## VERSION

**1.1.1\_rc1**

## SEE ALSO

**[felix(1)](/felix/1.md)** for a language introduction and man page index\
 **[flx(1)](/flx/1.md)** for a list of the tools.\
 **[flxcc(1)](/flxcc/1.md)** for a description of the wrapper generator tool.\
 **[flx\_lit(1)](/flx_lit/1.md)** for a description of literals\
 **[flx\_op(1)](/flx_op/1.md)** for a list of operators\
 **[flx\_cop(1)](/flx_cop/1.md)** for a list of C operator precedence names\
 **[flx\_key(1)](/flx_key/1.md)** for a list of keywords\
 **[flx\_grammar(1)](/flx_grammar/1.md)** for a grammar summary\
 **[flx\_lib\_typ(1)](/flx_lib_typ/1.md)** for a list of library types\
 **[flx\_dir(1)](/flx_dir/1.md)** for a list of directives\
 **[flx\_exec(1)](/flx_exec/1.md)** for a list of executable statements\
 **[flx\_decl(1)](/flx_decl/1.md)** for a list of declarative statements\
 **[flx\_bind(1)](/flx_bind/1.md)** for a list of binding statements\

## WEB SITE

See **http://felix.sourceforge.net**\

## AUTHOR

John Maxwell Skaller, mailto:skaller@users.sourceforge.net
