Show Menu
Cheatography

Syntax

import subscript.language
import subscript.Predef._
Top-level imports required in all SubScript sources.
script a = expr
Script definition
script..
  a = expr
  b = expr
Shorthand script definition
runScript(script­_name)
Run scripts like this
[ expr ]
Priori­tizing Parent­heses (like "­()" in "2 - (1 + 3)", just for scripts)
[** expr **]
Launch Anchor
[* expr *]
Launch
@a: b
Annotation
@{prin­tln­(th­ere)}: a
Also annota­tion. There points to the annotated expression node
var x: Int = 3
Variable declar­ations are possible in scripts
let scala_expr
Executes scala_expr as a tiny code fragment.

Sequential Operators

a ; b
Executes next operator as soon as current one has success
a b
Same as above
a
b
Same as above

Parallel Operators

a && b
Non-strict and-pa­ral­lelism. Succeeds iff all its operands do. On failure of one of the children terminates without success immedi­ately.
a & b
Strict and-pa­ral­lelism. Same as above, but if some of its children doesn't have success, it waits for the rest of the children to execute before termin­ating.
a || b
Non-strict or-par­all­elism. Succeeds iff at least one of its children does. After a children succeeds, it terminates immedi­ately with success.
a | b
Strict or-par­all­elism. Same as above, but waits for the rest of the children after one succeeds. Has success immedi­ately after at least one child succeeds (termi­nation and success are not the same things).

Result Values

runScript(script_name).$
From Scala code, returns the result value of script­_name script, as Try[Any].
a^
From SubScript code, sets the result of the parent script to that of a. E.g. in script foo = a^ b c, script foo will have a result of a. b and c are still executed as usually.
a^^
The result of the parent script becomes a Seq[Any]. The result of a is recorded into that Seq at the index equal to a's current pass (that is, first pass in a loop will go to index 0, second - to 1 etc).
a^^int_li­teral
The result of the parent script becomes a tuple. a's result is recorded at int_li­teral-th position to the tuple. E.g. a^^1 b^^2 will result in a tuple with _1 set to a's result and _2 - to b's result.
^literal
Sets the result of the parent script to literal. E.g. ^5, ^"Fo­o", ^'x'.
^literal^^
Sets the result to Seq[Any], records literal under its pass's index.
^literal^^int_li­teral
Sets the result to a tuple, places this literal under int_li­teral-th position in this tuple.
 

Scala Code Blocks

{! scala block !}
Normal code block. Activa­tion, Execution, Deacti­vation.
{: scala block :}
Tiny code block. Execution on Activa­tion.
{. scala block .}
Event-­han­dling code block. Does not execute automa­tic­ally, need manual execution.
{* scala block *}
Threaded code block. Executes from a new thread (all the other blocks execute from Script Executor's thread).

Special Operands

[+]
Epsilon, or empty action. Has success immedi­ately after activa­tion.
[-]
Delata, or deadlock. Terminates without success immedi­ately after activa­tion.
...
Loop. When used as an operand to a sequence, loops the sequence. E.g. a b ... executes in order "a b a b a b" etc as an infinite loop. a ... b and ... a b have same effect.
break
Break. Breaks activation of its parent operator.
break?
Optional break. Behaves like break, but resumes activation after an action happened in an operand activated before itself.
..?
Optional break loop. Mixes together break? and ... .

Altern­ative Operators

a + b
Choice. Starts with a and b activated. When either starts executing, excludes another.
a / b
Disruption. Executes a until b starts, then excludes (termi­nates) a and continues with b. If a gets terminated without b ever getting started, excludes b.

Condit­ional Operators

if scala_expr then expr else expr
Executes then part if scala_expr is true, otherwise - else part.
do expr then expr else expr
Executes do part first. If it has success, executes then part, otherwise - else part.

Dataflow

a ~~(x: T)~~> b
Dataflow. Executes a, casts its result to type T, assigns it to x and executes b with x in scope.
a ~~(x: T)~~> b
+~/~(x: E)~~> c
Dataflow with an extra clause to handle except­ions. If a succeeds, the behaviour is as in the case above. Otherwise, an exception with which a failed is casted to E (which must be <: Throwable) and handled by c. Like catch in try-catch.
a ~~(x: T)~~> b
+~~(y: A)~~> c
+~~(z: B)~~> d
Dataflow can arbitrary number of result­-ha­ndling clauses and except­ion­-ha­ndling clauses.
a ~~(x: T)~~^ scala_expr
+~~(x: A)~~^ scala_expr
Dataflow map. Similar to Dataflow, but runs the result of a through a given scala_expr and sets the result of it as the result of the parent script.
a ~~^ f
Shorthand for a ~~(x: T)~~^ f(x).
 

Comments

No comments yet. Add yours below!

Add a Comment

Your Comment

Please enter your name.

    Please enter your email address

      Please enter your Comment.

          Related Cheat Sheets

          Regular Expressions Cheat Sheet
          PHP Cheat Sheet
          Python Cheat Sheet