Beoran f17e62d27c Try different classes of operators. | 4 years ago | |
---|---|---|
cmd | 4 years ago | |
test | 5 years ago | |
LICENSE | 4 years ago | |
README.md | 4 years ago | |
alias.go | 4 years ago | |
ast.go | 4 years ago | |
ast_test.go | 5 years ago | |
block.go | 4 years ago | |
bool.go | 4 years ago | |
builtin.go | 4 years ago | |
callable.go | 4 years ago | |
cover.go | 4 years ago | |
defined.go | 4 years ago | |
design_muesli.muesli | 4 years ago | |
doc.go | 6 years ago | |
door.go | 4 years ago | |
empty.go | 4 years ago | |
error.go | 4 years ago | |
float.go | 4 years ago | |
go.mod | 5 years ago | |
go.sum | 5 years ago | |
help.go | 4 years ago | |
int.go | 4 years ago | |
keyword.go | 4 years ago | |
lexer.go | 4 years ago | |
lexer_test.go | 5 years ago | |
list.go | 4 years ago | |
logger.go | 5 years ago | |
map.go | 4 years ago | |
muesli.go | 6 years ago | |
parser.go | 4 years ago | |
parser_test.go | 5 years ago | |
redispatch.go | 4 years ago | |
signature.go | 4 years ago | |
string.go | 4 years ago | |
token.go | 4 years ago | |
type.go | 4 years ago | |
value.go | 4 years ago | |
vm.go | 4 years ago | |
vm_test.go | 5 years ago | |
word.go | 4 years ago |
Muesli is a scripting language implemented in Go, that has a simple command chain based TCL or shell like syntax but with rich semantics. Unlike TCL or shels, all muelsi values are typed, and many types are supported, not just string values. Additionaly, if so desired, every symbol used in the syntax can be replaced by a key word, leading to a native language programming feel.
A Muesli program consists of blocks and chains, separated by newlines or periods. A chain consists of one or more commands, linked together by operators.
Blocks consist of chains grouped together in blocks between braces {}. The commands in a block are not executed immediately but stored.
A single chain can be placed in parenthesis (), where the return value of the chain will be subsituted. Lists are formed by placing their contents between brackets [].
Every command has a return value, which can be of any type, and not just a number like in most shells. Furthermore commands have input and output, which default to stdin and stdout, but can be redirected or reconfigured.
There are three types of commands, namely direct commands, substitutions, and literal commands. A direct command starts with a name, and is followed by any number of parameters. Parameters may be which may be blocks, parenthesis, lists, names or literals, or values. An indirect command starts with a substitution followed by parameters. A literal command is simply a numeric, string, boolean or nil literal that evaluates to itself.
The language itself has no control statements, such as if, or for, these are implemented as commands in stead.
Muesly supports several kinds of values, namely: