|:: 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." |:@data stack: reset? :@data seen: $stack $value| :@data: $stack $value |:@data stack: reset| |:@data stack: push $stack $value| :@data: $stack $value |:@data stack: pop $stack :@data: $stack $value| :@data stack: reset :@data result: $value |:@data stack: pop $stack? :@data: $x $y| :@data seen: $x $y |:@data stack: pop $stack| :@data stack: reset :@data result: empty |:@data stack: peek $stack :@data: $stack $value?| :@data stack: reset :@data result: $value |:@data stack: peek $stack? :@data: $x $y| :@data seen: $x $y |:@data stack: peek $stack| :@data stack: reset :@data result: empty |:@retained stack: reset? :@retained seen: $stack $value| :@retained: $stack $value |:@retained stack: reset| |:@retained stack: push $stack $value| :@retained: $stack $value |:@retained stack: pop $stack :@retained: $stack $value| :@retained stack: reset :@retained result: $value |:@retained stack: pop $stack? :@retained: $x $y| :@retained seen: $x $y |:@retained stack: pop $stack| :@retained stack: reset :@retained result: empty |:@retained stack: peek $stack :@retained: $stack $value?| :@retained stack: reset :@retained result: $value |:@retained stack: peek $stack? :@retained: $x $y| :@retained seen: $x $y |:@retained stack: peek $stack| :@retained stack: reset :@retained result: empty |:@registers: reset :@reg seen: $reg $value| :@reg: $reg $value |:@registers: reset| |:@registers: store $register $value :@reg: $register $other-value| :@registers: reset :@reg: $register $value |:@registers: store $register $value :@reg: $other-register $other-value| :@reg seen: $other-register $other-value |:@registers: store $register $value| :@reg: $register $value |:@registers: fetch $register :@reg: $register $value?| :@registers: reset :@registers result: $value |:@registers: fetch $register :@reg: $other-register $other-value| :seen @reg: $other-register $other-value |:@registers: fetch $register| :@registers: reset :@registers result: empty |:@registers: clear $register :@reg: $register $value| :@registers: reset |:@registers: clear $register :@reg: $other-register $value| :@registers seen: $other-register $value |:@registers: clear $register| |:: match $symbol at top of $stack :failed:?| |:: match $symbol at top of $stack :@data result: $symbol| :@retained stack: push $stack $symbol |:: match $symbol at top of $stack :@data result: $wrong-symbol| :@data stack: push $stack $wrong-symbol :failed: |:: match $symbol at top of $stack :@data result: empty| :failed: |:: match $symbol at top of $stack?| :@data stack: pop $stack |:: bind $stack $reg :failed:?| |:: bind $stack $reg :@registers result: $empty :@data result: $symbol| :@retained stack: push $stack $symbol :@registers: store $reg $symbol |:: bind $stack $reg :@register result: $symbol :@data result: $symbol| :@retained stack: push $stack $symbol |:: bind $stack $reg :@register result: $symbol :@data result: $different-symbol| :failed: :@data stack: push $stack $different-symbol |:: bind $stack $reg?| :@registers: fetch $reg :@data stack: pop $stack |:: consume $stack :failed:? :@retained result: empty| |:: consume $stack :failed:? :@retained result: $value| :@data stack: push $stack $value |:: consume $stack :@retained result: $_| |:: consume $stack?| :@retained stack: pop $stack |:: push $stack $symbol :failed:?| |:: push $stack $symbol| :@data stack: push $stack $symbol |:: pushvar $stack $reg :failed:?| |:: pushvar $stack $reg :@registers result: $value| :@data stack: push $stack $value |:: pushvar $stack $reg?| :@registers: fetch $reg |:: unbind $reg| :@registers: clear $reg |:: unbind| |:: done :failed:| :: next rule :: ; |:: done| :: reset rules :: rule :: ; |:: reset rules :rule: ;| |:: reset rules? :rule:| |:: next rule :rule: ;| :: rule |:: next rule :rule:| :: next rule :: rule |:: jet @stdio write/1 :failed:?| |:: jet @stdio write/1 :@registers result: $symbol| :@jet: "io.write(string.char(tonumber($symbol)))" |:: jet @stdio write/1?| :@registers: fetch 1 |:/:| :: print message :message: "Hello, World!" |:: ;| :rule: ; :: 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 :: done |:@stdio: write $char| :@jet: "io.write(string.char(tonumber($char)))" |:: rule :: ;| :rule: :rule: ; :: match 2 at top of @stdio.arity :: match write at top of @stdio.1 :: bind @stdio.2 1 :: consume @stdio.arity :: consume @stdio.1 :: consume @stdio.2 :: jet @stdio write/1 :: unbind 1 :: done |:: print message? :message: $char| :@stdio: write $char |:: rule :: rule :: ;| :rule: :rule: :rule: ; :: match 2 at top of .arity :: match print at top of .1 :: match message at top of .2 :: match 1 at top of message.arity :: 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 :: done |:: print message| :@stdio: write 10 |:: rule :: rule :: rule :: ;| :rule: :rule: :rule: :rule: ; :: match 2 at top of .arity :: match print at top of .1 :: match message at top of .2 :: consume .arity :: consume .1 :: consume .2 :: push @stdio.arity 2 :: push @stdio.1 write :: push @stdio.2 10 :: unbind 1 :: done || :: ;