Slang
Example code
# this is a comment
#| and that is a
	multiline one. |#
const u32 n = 123123  # n is of type const u32
const i64 m = 10**18  # m is of type const i64
const int z = 2**128  # z is of type const int (unsized)
const auto q = 2**256  # q is of type const int
char f(str x) {  # f() is of type char, x is of type str
	auto c = x[1]  # c is of type char
	return c
}
auto g(str x) {  # g() is of type char, x is of type str
	return x[0]  # retval is of type char
}
int h(int x) = x+1  # h() is of type int, x is of type int
main {
	stdio.println(h(n), \  # comment here too
		f('123asd') + g('32') + 1)  #--> «123124 f»
	stdio.println(q/z/2**96)  #--> «4294967296.0»
}
Tokens
Token resolution order
- Special
 - Operator
 - Literal
 - Keyword
 - Identifier
 
Syntax structures
Note: * after syntax unit means any number of them.
Abstract
{[<\n | ;>]* <<expr> <\n | ;>>* [<\n | ;>]*}—code<<expr> | <code>>—block
Primitive
<<literal> | <funccall> | <attrget> | <itemget> | <identifier> | <lambda>>—value<value>\[<value>\]—itemget<(<expr>) | <value> | <operator> <expr> | <expr> <operator> <expr>>—expr(f(x+3)is an instance ofexpr, alsof,x+3andxareexprs too)
Non-final
[modifier]* <type>—typedef(left-hand type definition)[typedef] <identifier> [? | + | * | ** | =<expr>]—argdef(argument definition)
?— if present then argument value,noneelse.
+— tuple with at least one argument.
*— tuple with any number of arguments.
**— object with keyword arguments.
=— default value if argument not specified.
([<argdef>[, <argdef>]*]) -> <typedef> = <expr>—lambda(lambda function)<<expr>[, <expr>]*[, *<expr>] | *<expr>>—callargs<<identifier>=<expr>[, <identifier>=<expr>]*[, **<expr>] | **<expr>>—callkwargs
Final (ordered by resolution order)
<typedef> <identifier>([<argdef>[, <argdef>]*]) <<code> | = <expr>>—funcdef(function definition)<exprkeyword> [expr]—keywordexpr(keyword expression)<typedef> <identifier> [= <value>]—vardef(variable definition)<identifier> = <value>—assignment<identifier>[, <identifier>]* = <value>—unpackassignment<value>([<callargs> | <callkwargs> | <callargs>, <callkwargs>])—funccall(function call)<expr>— expr evaluation (only in REPL)if (<expr>) <block>—conditionalfor (<identifier> in <expr>) <block>—forloopwhile (<expr>) <block>—whileloopelse <block>—elseclause
Keywords
return [expr]— return from function
Modifiers
const— immutable/constant variable
Reserved keywords
def
Identifiers
Non-empty sequence of alphanumeric characters plus underscore («_»), not starting with a digit character.
Regex: [_\w][_\w\d]*
Data types
- 
i8,i16,i32,i64,i128— fixed size integer - 
u8,u16,u32,u64,u128— fixed size unsigned integer - 
f8,f16,f32,f64,f128— fixed size IEEE-754 floating point number - 
uf8,uf16,uf32,uf64,uf128— fixed size unsigned floating point number - 
int— unsized («big») integer - 
uint— unsized unsigned integer - 
float— unsized floating point number - 
ufloat— unsized unsigned floating point - 
bool— logical (boolean) value - 
byte— single byte - 
char— UTF-8 character - 
str— UTF-8 string - 
void— nothing (or anything...) - 
auto— compile-time type deduction based on value 
Literals
Note: * after syntax unit here means any number of them, + means at least one.
<<0<b | o | x>><digit+> | <digit+>.<digit*> | <digit*>.<digit+>>— number<"<character*>" | '<character*>'>— string
Literal structures
[ <value>[, <value>]* ]— list( [type] <value>[, [type] <value>]* )— tuple{ <<key>: <value>>* }— map
Operators
<operator> <operand>— unary operators usage<operand> <operator> <operand>— binary operators usage<operand> <operator>= <operand>— in-place operator usage
Character operators
A set of pre-defined character operators:
!+-~— unary charset%&*+-/<=>^|— binary charset==,**,//,<<,>>— double-char binary operators
Keyword operators
A set of pre-defined keyword operators:
not— unary keyword operatorand,or,xor,is,is not,to— binary keyword operators
Specials
#,#|,|#— comment specials;— expr separator special->,@.,@,.,:— attrget optype specials[,]— itemget specials\,?=(){}— other specials charset
Footnotes
All character class checks are performed in current locale.
by Sdore, 2020