Originally called TaleCraft Engine Command Processor System and developed for the Talecraft Game Engine (TCGE) by Longor1996, IMPRAL is a simple command processing language, intended for use in a commandline/REPL.
Currently incomplete/still in development. Do not use.
The language, like any Lisp does, consists of commands (function calls) stored as lists, where the first item in the list is a symbol, representing the name of the specific command to be evaluated.
A command consists of three (and a half) parts and may contain line breaks:
The symbol identifying the command.
A unique bareword or any of the built-in operators.
Neither positional nor named arguments must come before the command identifier.
The positional arguments.
A whitespace separated list of values.
The named arguments.
A whitespace separated list of key=value
-pairs; the keys are always barewords.
Named arguments are required to be written after the positional arguments.
The only exception to this are continuation commands in the last position.
Continuation command. (optional)
Another command that is an extra positional parameter in the last position, written after a :
.
Many commands allow you to omit it.
To sum this up:
symbol arg1 arg2 … argN kvarg1=val kvarg2=val … kvargN=val
symbol … …: command
A literal is a simple value, like a number, string, boolean, etc. etc.
The absence of a value; written as null
.
There is true
and false
. That's it.
I will not explain what a number is...
Examples:
1337
-1
42.69
1.0e-5
0b101010
0xC0FFEE
A bareword is any sequence of characters that consists entirely of letters, digits, _
and -
,
always starting with at least one letter.
You can write just text: "Hello, World!"
A list can be created in two ways: Either by using the list
-command or the [ … ]
-syntax.
list item1 item2 … itemN
[item1, item2, … itemN]
Note: The commas are completely ignored and totally optional.
A map, too, can be created in two ways: Either by using the mmap
-command or the { … }
-syntax.
mmap key1 val1 key2 val2 … keyN valN
{ key1: val1, key2: val2, …, keyN: valN}
There must be one or more ,
between the key-value pairs; there may be a ,
before the }
.