|:: documentation for NILS Form| :@doc string: "Nova In-Language Static Form is a possible structure for lowering Nova code into a bytecode language describable in Nova. This is not intended to be written by hand." |:: match $stack $arity :failed:?| |:: match @stdio.arity $arity :@stdio.arity: $arity| :@stdio.arity (r): $arity |:: match @stdio.1 $1 :@stdio.1: $1| :@stdio.1 (r): $1 |:: match @stdio.2 $2 :@stdio.2: $2| :@stdio.2 (r): $2 |:: match .arity $arity :.arity: $arity| :.arity (r): $arity |:: match .1 $1 :.1: $1| :.1 (r): $1 |:: match .2 $2 :.2: $2| :.2 (r): $2 |:: match message.arity $arity :message.arity: $arity| :message.arity (r): $arity |:: match message.1 $1 :message.1: $1| :message.1 (r): $1 |:: match $stack $arity| :failed: |:: bind $stack $symbol :failed:?| |:: bind @stdio.2 1 :@stdio.2: $2| :@stdio.2 (r): $2 :1: $2 |:: bind message.1 1 :message.1: $1| :message.1 (r): $1 :1: $1 |:: bind $stack $symbol| :failed: |:: consume @stdio.arity :@stdio.arity (r): $symbol :failed:?| :@stdio.arity: $symbol |:: consume @stdio.1 :@stdio.1 (r): $symbol :failed:?| :@stdio.1: $symbol |:: consume @stdio.2 :@stdio.2 (r): $symbol :failed:?| :@stdio.2: $symbol |:: consume .arity :.arity (r): $symbol :failed:?| :.arity: $symbol |:: consume .1 :.1 (r): $symbol :failed:?| :.1: $symbol |:: consume .2 :.2 (r): $symbol :failed:?| :.2: $symbol |:: consume message.arity :message.arity (r): $symbol :failed:?| :message.arity: $symbol |:: consume message.1 :message.1 (r): $symbol :failed:?| :message.1: $symbol |:: consume $stack :failed:?| |:: consume @stdio.arity :@stdio.arity (r): $symbol| |:: consume @stdio.1 :@stdio.1 (r): $symbol| |:: consume @stdio.2 :@stdio.2 (r): $symbol| |:: consume .arity :.arity (r): $symbol| |:: consume .1 :.1 (r): $symbol| |:: consume .2 :.2 (r): $symbol| |:: consume message.arity :message.arity (r): $symbol| |:: consume message.1 :message.1 (r): $symbol| |:: jet @stdio write/1 :failed:?| |:: jet @stdio write/1| :@jet: "io.write(string.char(tonumber(stacks["1"][1][1])))" |:: push $stack $symbol :failed:?| |:: push @stdio.arity $arity| :@stdio.arity: $arity |:: push @stdio.1 $symbol| :@stdio.1: $symbol |:: push @stdio.2 $symbol| :@stdio.2: $symbol |:: push .arity $arity| :.arity: $arity |:: push .1 $symbol| :.1: $symbol |:: push .2 $symbol| :.2: $symbol |:: push message.arity $arity| :message.arity: $arity |:: push message.1 $symbol| :message.1: $symbol |:: pushvar $stack $reg :failed:?| |:: pushvar @stdio.2 1 :1: $1?| :@stdio.2: $1 |:: unbind 1 :1: $1| |:: unbind $reg| |:: rule 1 succeeded :failed:| :: rule 2 |:: rule 2 succeeded :failed:| :: rule 3 |:: rule 3 succeeded :failed:| :: rule 4 |:: rule $x succeeded :failed:?| |:: rule $x succeeded| :: rule 1 |:/:| :: print message :message: "Hello, World!" |:: rule 0| :: push .arity 2 :: push .1 print :: push .2 message :: push message.arity 1 :: push message.1 33 :: push message.arity 1 :: push message.1 100 :: push message.arity 1 :: push message.1 108 :: push message.arity 1 :: push message.1 114 :: push message.arity 1 :: push message.1 111 :: push message.arity 1 :: push message.1 87 :: push message.arity 1 :: push message.1 32 :: push message.arity 1 :: push message.1 44 :: push message.arity 1 :: push message.1 111 :: push message.arity 1 :: push message.1 108 :: push message.arity 1 :: push message.1 108 :: push message.arity 1 :: push message.1 101 :: push message.arity 1 :: push message.1 72 :: rule 0 succeeded |:@stdio: write $char| :@jet: "io.write(string.char(tonumber($char)))" |:: rule 1| :: match @stdio.arity 2 :: match @stdio.1 write :: bind @stdio.2 1 :: consume @stdio.arity :: consume @stdio.1 :: consume @stdio.2 :: jet @stdio write/1 :: unbind 1 :: rule 1 succeeded |:: print message? :message: $char| :@stdio: write $char |:: rule 2| :: match .arity 2 :: match .1 print :: match .2 message :: match message.arity 1 :: bind message.1 1 :: consume .arity :: consume .1 :: consume .2 :: consume message.arity :: consume message.1 :: push @stdio.arity 2 :: push @stdio.1 write :: pushvar @stdio.2 1 :: push .arity 2 :: push .1 print :: push .2 message :: unbind 1 :: rule 2 succeeded |:: print message| :@stdio: write 10 |:: rule 3| :: match .arity 2 :: match .1 print :: match .2 message :: consume .arity :: consume .1 :: consume .2 :: push @stdio.arity 2 :: push @stdio.1 write :: push @stdio.2 10 :: unbind 1 :: rule 3 succeeded || :: rule 0