Script Assembly Code

Script Assembly Code is a low-level esolang. The code looks like actual “assembly code” but much simpler.
== syntax ==
=== basic ===
Use %prt to print texts on the screen.
Insert . at the beginning of the line to tell the interpreter execute the code on that line. Use \s to create a space character.
Don’t add space randomly! This will result in an error.
Example :
 . %prt Hello\sWorld! # this will be executed
 %prt Hello! # this won’t be executed
 .% prt hi hi hi abc # error
=== math calculation ===
Use %r %{code type} {input} {input2} to perform a calculation. Use prt function to show the result.
${n} means the result on line(n).
code type can be : 
* +
* -
* *
* /
* m (mod function)
Some another examples:
 %r %+ 4 78
 . %prt $1 # prints 82. (4 + 78 on line 1)
 %r %* 2 $1 # 2 + {result of line 1} 
 . %prt $3 # prints 164. (2 * (4 + 78) on line 3 and 1)
=== stack ===
stack is a list of line to be executed. Use %c ={name} {[line list]} to create a stack.
 %r %m 5 3
 %prt $1
 %prt Hi\sHi\sHi
 . %c =mystack $2 $3
 
 # stack named “mystack” created but didn’t execute by the interpreter.
=== control flow ===
Use control flow (syntax : %i %{type} {input} {input2} {when true stack} {optional: when false stack} ) to create If Else statement.
Type can be:
* gt >
* lt <
* ge >=
* le <=
* eq ==
 %r %- 67 66
 %prt $1
 . %c =anotherstack $2
 %prt how?5<4?
 . %c =s $4
 . %i %gt 5 4 =anotherstack =s
 
 # if (5>4), prints result of 67-66, else print “how?5<4?”
=== variables ===
Use %v %{action} *{variable name} {value} to create,set,change variable and it’s value.
action can be :
* n (create variable)
* s (set variable value)
* c (change variable value)
 . %v %n *myvariable 123 
 . %v %s *myvariable 122
 . %v %c *myvariable 1
=== loops ===
Use %rp {stack} {repeat times} to create loop.
 %prt repeating\s10\stimes
 . %c =s $1
 . %rp =s 10
Use %brk {brk out} to break out of an loop. brk out usually is 2.
 . %v %n *i 0
 %brk 2
 . %c =one $2
 %v %c *i 1
 . %c =two $4
 %i %ge *i 10 =one =two
 . %c =ifelse $6
 . %rp =ifelse 10000000000
 . %prt finished!
Here’s an pseudo code of above program.
 new variable i
 set i to 0
 repeat 10000000000 {
 if i >= 10 then
 break out to line after repeat
 else
 change i by 1
 }
 print "finished!"
=== semicolon ===
You may add ; after each line of code. This is optional, and for minify the code.
 . %prt hi!
 . %prt abc
Can become
 . %prt hi! ;
 . %prt abc ;
Or
 . %prt hi! ; . %prt abc ;
=== import and export ===
There is some built in libraries for you to import.
They will be explained later.
 . #import string %wit _ # import string library, set it to _
 # you may change _ to other single chars
 . %prt _get 0 hihi # prints h ("hihi"’s first char)
When you want to export things, you may add export.
 . %prt hi!
 . %c =c $1
 . #export =c %wit custom # export library named custom with stack
== Libraries ==
You can import built in libraries.
Here is some Doc.
All {} is input that you can modify.
(Their name is all lowercase, default import as _)
=== string ===
Import :
 . #import string %wit _
Get char at index in string
 . _get {index} {string}
Returns string.charAt(index-1)
Get count of substrings appear in strings
 . _cnt {string} {substring}