Syntax
Commands
Commands start on a new line with an identifier or variable (index). This will be called.
command1
$command1
$table.valueProviding identifiers to a command will call the command with the given arguments. Identifiers automatically get coerced into strings.
print value1 value2 value3Variables
A variable is the result of a command or expression. You can define variables by suffixing an identifier with the = sign. When the next token after the = sign is an identifier, it's considered a command and will be called. Otherwise, it's considered an expression.
variable = command1String Literals
You can create string literals by surrounding a string with "". You can pass string literals to commands and variables. Using a string literal lets you pass strings that cannot be parsed as an identifier
print "Hello World!"
variable = "Hello World!"Number Literals
Numbers consist of a sequence of digits and optionally a period inbetween. You are allowed to use underscores and e in your numbers.
give-money 100_000
give-money 1e6
n = 1e6You can write hexadecimal or binary numbers by prefixing it with 0x or 0b.
set-flags 0b1111_1111
set-hexadecimal-value 0xFFFFFFTable Literals
You can define tables similar to luau inside Conch. They respect all luau semantics. Identifiers are automatically coerced into strings.
array = { 1, 2, 3, 4 }
dictionary = { value = 1234, ["test"] = 1234, [meow] = true }
mixed = { value = 1234, 1, 2, 3, 4 }Vector Literals
Vectors can be defined by surrounding 3 values with [].
vector = [1, 2, 3]Nested Commands
Conch doesn't allow executing commands when defining tables or vector literals. You can get around this by wrapping your command with $().
value = { [$( command1 "meow" )] = true }Booleans
true and false are keywords, and when used convert to a boolean.
value = trueFunction Literals
Functions can be defined by surrounding a list of arguments with || and then providing a body with {}.
meow = || {
print "meow!"
}
foo = |argument| {
print $argument
}You can then evaluate these functions manually in your code.
$meow
$fooControl Flow
Conch provides basic control flow statements to allow for writing more complex commands. By default, conch comes with if, while and for. Conch also provides break and continue statements. These are currently experimental features.
if (false) {
} else {
}
if (command1 true) {
} else if (command2 true) {
}while (true) {
break
}for ($table) | key, value | {
print $key $value
}
for (command1) |key, value| {
print $key $value
}