# 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»
}
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 of expr
, also f
, x+3
and x
are expr
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 functionconst
— immutable/constant variabledef
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 usageA set of pre-defined character operators:
!+-~
— unary charset%&*+-/<=>^|
— binary charset==
, **
, //
, <<
, >>
— double-char binary operatorsA 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 charsetAll character class checks are performed in current locale.
by Sdore, 2021-22
slang.sdore.me