Skip to content

Syntax reference

Felipe Martínez edited this page Apr 11, 2020 · 25 revisions

A LS script is executed sequentially from top to bottom. The script is composed only of top-level cases.

Concepts

Slots

Slots represent a machine's input and output, and can be raw or indexed. The number inside an indexer will always be treated as a decimal number.

Truthy values

A value will be considered "true" if it is greater than 0. If you instead want to check for a value equal to 1, use the equality operator (x == 1)


Comments

Comments can be started with a # anywhere on a line.


Case blocks

Conditional cases

Only executed if the condition evaluates to a truthy value.

when <expression>
    ...
end

Unconditional cases

Will be executed regardless of the machine's state.

any
    ...
end
once
    ...
end
  • any cases will always be executed, regardless of the machine's state
  • once cases will only be executed once (up to machine implementation, usually on first update)

Expressions

Number literals

LogicScripts distinguishes between binary and decimal numbers through the use of a suffix apostrophe ('). All decimal numbers must be suffixed, even if they contain digits other than 0 and 1, to prevent mistakes and confusion.

1010
123'
123 # Invalid, throws warning

Slot accessors

Only input (in) and memory (mem) slots can be used as expressions.

in
in[123]

List expression

Accepts multiple expressions in list form and combines them into a single number

(expr1, expr2, expr3, ...)

Operators

All operators operate on numbers.

Binary operators (binary as in two operands)

  • Bitwise operators:
    • AND &
    • OR |
  • Arithmetic operators:
    • Add +
    • Subtract -
    • Multiply *
    • Divide /
  • Comparison operators:
    • Equals ==
    • Greater >
    • Greater or equal >=
    • Lesser <
    • Lesser or equal <=

Unary operators

  • Negation !
    • Will negate all bits of a number

Explicit operators

  • Aggregation operators:
    • Will combine a number's bits into a single bit
    • AND and
      • and(1010) == 0
    • OR or
      • or(1010) == 1
    • Sum of bits sum
      • sum(110011) == 4
  • Truncate trunc
    • Will remove a number's zero-bits on the left side
    • trunc(00011) == 11

Statements

Contained inside cases or other statements.

Assignment

Assign a value to a slot. Only output (out) and memory (mem) slots can be assigned to.

out = 1010
mem[1] = 1

If statements

Will execute a block of statements if a condition is evaluated to a truthy value.

if <expression>
    ...
end
if <expression>
    ...
else
    ...
end

Clone this wiki locally