# this is a comment
#| and that is a
multiline one. |#
const u32 n = 123123 # n: const u32 (unsigned 32 bit)
const i64 m = 10**18 # m: const i64 (signed 64 bit)
const int z = 2**128 # z: const int (signed unsized)
const auto q = 2**256 # q: const int (signed unsized)
char f(str x) { # f(): char, x: str
auto c = x[1] # c: char
return c # char
}
auto g(str x) { # g(): char, x: str
return x[0] # char
}
int h(int x) = x+1 # h(): int, x: int
main {
stdio.println(h(n), \ # comments allowed here too
f('123asd') + g('32') + 1) #--> «123124 f»
stdio.println(q/z/2**96) #--> «4294967296.0»
}
- Special
- Operator
- Literal
- Keyword
- Identifier
Note: *
after syntax unit means any number of them.
{[<\n | ;>]* <<expr> <\n | ;>>* [<\n | ;>]*}
—code
<<expr> | <code>>
—block
<<funccall> | <itemget> | <attrget> | <identifier> | <lambda> | <literal>>
—value
<(<expr>) | <value> | <operator> <expr> | <expr> <operator> <expr>>
—expr
(f(x+3)
is an instance ofexpr
, alsof
,x+3
andx
areexpr
s too)
[modifier]* <type>
—typedef
(left-hand type definition)[typedef] <identifier> [? | + | * | ** | =<expr>]
—argdef
(argument definition)
?
— if present then argument value,none
else.
+
— 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
<value>\[<expr>\]
—itemget
<value>.<identifier>
—attrget
<typedef> <identifier>([<argdef>[, <argdef>]*]) <<code> | = <expr>>
—funcdef
(function definition)<exprkeyword> [expr]
—keywordexpr
(keyword expression)<typedef> <identifier> [= <expr>]
—vardef
(variable definition)<identifier> = <expr>
—assignment
<identifier>[, <identifier>]* = <expr>
—unpackassignment
<value>([<callargs> | <callkwargs> | <callargs>, <callkwargs>])
—funccall
(function call)<expr>
— expr evaluation (only in REPL)if (<expr>) <block>
—conditional
for (<identifier> in <expr>) <block>
—forloop
while (<expr>) <block>
—whileloop
else <block>
—elseclause
return [expr]
— return from function
const
— immutable/constant variable
def
try
catch
except
finally
raise
with
yield
include
using
default
Non-empty sequence of alphanumeric characters plus underscore («_»), not starting with a digit character.
Regex: [^\W\d][\w]*
-
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 -
c8
,c16
,c32
,c64
,c128
— fixed size complex number -
uc8
,uc16
,uc32
,uc64
,uc128
— fixed size unsigned complex number -
int
— unsized («big») integer -
uint
— unsized unsigned integer -
float
— unsized floating point number -
ufloat
— unsized unsigned floating point -
complex
— unsized complex number -
ucomplex
— unsized unsigned complex number -
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
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
[ <value>[, <value>]* ]
— list( [type] <value>[, [type] <value>]* )
— tuple{ <<key>: <value>>* }
— map
<operator> <operand>
— unary operators usage<operand> <operator> <operand>
— binary operators usage<operand> <operator>= <operand>
— in-place operator usage
A set of pre-defined character operators:
!+-~
— unary charset%&*+-/<=>^|
— binary charset==
,**
,//
,<<
,>>
— double-char binary operators
A set of pre-defined keyword operators:
not
— unary keyword operatorand
,or
,xor
,is
,is not
,to
— binary keyword operators
#
,#|
,|#
— comment specials;
— expr separator special->
,@.
,@
,.
,:
— attrget optype specials[
,]
— itemget specials\,?=(){}
— other specials charset
All character class checks are performed in current locale.
by Sdore, 2021-22
slang.sdore.me