Valence is a programming language where each symbol is a homophone with multiple meanings. Context determines the meaning of the symbol; if multiple readings remain, each interpretation plays out in parallel.
In Valence:
- Any symbol can be read as a variable name, an octal digit, a command, a type, or an expression
- For commands and expressions, most symbols have multiple interpretations based on parameter count
- Every possible reading of a program plays out in parallel
- Brackets can disambiguate a phrase when needed
There is no single line of Valence that isn't valid; any combination of the signs has multiple meanings. However, some programs have mismatched brackets or (detectable) infinite loops; during execution, these are skipped.
Feel free to open issues or add failing tests for anything not already there. Here are the major things still in progress.
IN PROGRESS:
- INPUT (currently non-functional)
- Support for TRADE OPERATION in the interpreter
- Full testing of Queue and casting
- Some display fixes
Each instruction is a single letter, borrowed from Ancient Greek numbering and measuring signs. While there is some association between some borrowed signs and usage, they all mean something significantly different in Valence.
| symbol | typed as | interpretation | type | params |
|---|---|---|---|---|
| 𐅶 | q | 0 | octal digit | 0 |
| 𐅶 | var | 0 | ||
| int | type | 0 | ||
| not | exp | 1 (exp) | ||
| add | exp | 2 (exp, exp) | ||
| while | cmd | 1 (exp) | ||
| add_assign | cmd | 2 (var, exp) | ||
| 𐆇 | w | 1 | octal digit | 0 |
| 𐆇 | var | 0 | ||
| read_as_digit | exp | 1 (digit) | ||
| subtract | exp | 2 (exp, exp) | ||
| if | cmd | 1 (exp) | ||
| while_queue | cmd | 2 (var, exp) | ||
| 𐅾 | e | 2 | octal digit | 0 |
| 𐅾 | var | 0 | ||
| read_as_var | exp | 1 (var) | ||
| div | exp | 2 (exp, exp) | ||
| end block | cmd | 0 | ||
| goto | cmd | 1 (exp) | ||
| trade_op | cmd | 2 (var, range): CURRENTLY IN PROGRESS | ||
| 𐆋 | a | 3 | octal digit | 0 |
| 𐆋 | var | 0 | ||
| queue | type | 0 | ||
| equals | exp | 2 (exp, exp) | ||
| cmd | 1 (exp) | |||
| 𐆉 | s | 4 | octal digit | 0 |
| string | type | 0 | ||
| int_or_floor | exp | 1 (exp) | ||
| cast | exp | 2 (type, exp) | ||
| label | cmd | 1 (var) | ||
| assign | cmd | 2 (var, exp) | ||
| 𐅻 | d | 5 | octal digit | 0 |
| 𐅻 | var | 0 | ||
| char | type | 0 | ||
| mult_by_eight | exp | 1 (exp) | ||
| get_element (from queue) | exp | 2 (exp, exp) | ||
| jump | cmd | 1 (exp) | ||
| append | cmd | 2 (var, exp) | ||
| 𐆊 | z | 6 | octal digit | 0 |
| 𐆊 | var | 0 | ||
| bool | type | 0 | ||
| or | exp | 2 (exp, exp) | ||
| else | cmd | 0 | ||
| else_if | cmd | 1 (exp) | ||
| 𐆁 | x | 7 | octal digit | 0 |
| 𐆁 | var | 0 | ||
| ratio | type | 0 | ||
| dequeue | var | 1 | ||
| mul | exp | 2 (exp, exp) | ||
| input | cmd | 1 (var) | ||
| mul_assign | cmd | 2 (var, exp) | ||
| [ | [ | begin lexical group | ||
| ] | ] | end lexical group |
[𐆋]𐆉[[𐅻]𐆉[[𐅻[𐅻[𐆇𐆇]]]𐅶[𐅻[𐆇𐆇]]]]
[𐅶]𐆉[𐅾𐆋]
[𐆋]𐅶[[𐅻[𐆇𐆋]]𐅶[𐆇𐅻]]
[𐅶]𐅻[𐅾𐆋]
[𐆋]𐅶[𐆇𐆁]
[𐅶]𐅻[𐅾𐆋]
[𐅶]𐅻[𐅾𐆋]
[𐆋]𐅶[𐆇𐆋]
[𐅶]𐅻[𐅾𐆋]
[𐅾𐆉]𐆉[𐅻[𐆇𐆉]]
[𐅶]𐅶[𐅾𐆉]
[𐆁]𐆉[[[𐅻[𐅻[𐆇𐆇]]]𐅶[𐅻[𐆇𐅾]]]𐅶[𐆇𐆁]]
[𐅶]𐅻[𐅾𐆁]
[𐅶]𐅻[𐅾𐆋]
[𐆋]𐅶[𐆇𐆋]
[𐅶]𐅻[𐅾𐆋]
[𐆋]𐅶[𐅶[𐆇[𐆊]]]
[𐅶]𐅻[𐅾𐆋]
[𐆋]𐅶[𐅶[𐅻[𐆇𐆇]]]
[𐅶]𐅻[𐅾𐆋]
𐆋[𐅾𐅶]