IMPRAL
Introduction
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.
Syntax & Semantics
Command Syntax
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 ofkey=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:
- Basic Command Syntax:
symbol arg1 arg2 … argN kvarg1=val kvarg2=val … kvargN=val - With continuation:
symbol … …: command
Literals
A literal is a simple value, like a number, string, boolean, etc. etc.
Nothing
The absence of a value; written as null.
Booleans
There is true and false. That's it.
Numbers
I will not explain what a number is...
Examples:
1337-142.691.0e-50b1010100xC0FFEE
Barewords
A bareword is any sequence of characters that consists entirely of letters, digits, _ and -,
always starting with at least one letter.
Strings
You can write just text: "Hello, World!"
Lists
A list can be created in two ways: Either by using the list-command or the [ … ]-syntax.
- To create a list by command:
list item1 item2 … itemN - Trough syntax:
[item1, item2, … itemN]
Note: The commas are completely ignored and totally optional.
Maps
A map, too, can be created in two ways: Either by using the mmap-command or the { … }-syntax.
- Trough command:
mmap key1 val1 key2 val2 … keyN valN - Trough syntax:
{ key1: val1, key2: val2, …, keyN: valN}
There must be one or more , between the key-value pairs; there may be a , before the }.