hello-world.nils.nv(文件已创建)
@@ -0,0 +1,124 @@ | |||
1 | + | |:: documentation for NILS Form| | |
2 | + | :@doc string: | |
3 | + | "Nova In-Language Static Form is a possible structure for lowering | |
4 | + | Nova code into a bytecode language describable in Nova. This is not | |
5 | + | intended to be written by hand." | |
6 | + | ||
7 | + | |:: match $stack $arity :failed:?| | |
8 | + | |:: match @stdio.arity $arity :@stdio.arity: $arity| :@stdio.arity (r): $arity | |
9 | + | |:: match @stdio.1 $1 :@stdio.1: $1| :@stdio.1 (r): $1 | |
10 | + | |:: match @stdio.2 $2 :@stdio.2: $2| :@stdio.2 (r): $2 | |
11 | + | |:: match .arity $arity :.arity: $arity| :.arity (r): $arity | |
12 | + | |:: match .1 $1 :.1: $1| :.1 (r): $1 | |
13 | + | |:: match .2 $2 :.2: $2| :.2 (r): $2 | |
14 | + | |:: match message.arity $arity :message.arity: $arity| :message.arity (r): $arity | |
15 | + | |:: match message.1 $1 :message.1: $1| :message.1 (r): $1 | |
16 | + | |:: match $stack $arity| :failed: | |
17 | + | ||
18 | + | |:: bind $stack $symbol :failed:?| | |
19 | + | |:: bind @stdio.2 1 :@stdio.2: $2| :@stdio.2 (r): $2 :1: $2 | |
20 | + | |:: bind message.1 1 :message.1: $1| :message.1 (r): $1 :1: $1 | |
21 | + | |:: bind $stack $symbol| :failed: | |
22 | + | ||
23 | + | |:: consume @stdio.arity :@stdio.arity (r): $symbol :failed:?| :@stdio.arity: $symbol | |
24 | + | |:: consume @stdio.1 :@stdio.1 (r): $symbol :failed:?| :@stdio.1: $symbol | |
25 | + | |:: consume @stdio.2 :@stdio.2 (r): $symbol :failed:?| :@stdio.2: $symbol | |
26 | + | |:: consume .arity :.arity (r): $symbol :failed:?| :.arity: $symbol | |
27 | + | |:: consume .1 :.1 (r): $symbol :failed:?| :.1: $symbol | |
28 | + | |:: consume .2 :.2 (r): $symbol :failed:?| :.2: $symbol | |
29 | + | |:: consume message.arity :message.arity (r): $symbol :failed:?| :message.arity: $symbol | |
30 | + | |:: consume message.1 :message.1 (r): $symbol :failed:?| :message.1: $symbol | |
31 | + | |:: consume $stack :failed:?| | |
32 | + | ||
33 | + | |:: consume @stdio.arity :@stdio.arity (r): $symbol| | |
34 | + | |:: consume @stdio.1 :@stdio.1 (r): $symbol| | |
35 | + | |:: consume @stdio.2 :@stdio.2 (r): $symbol| | |
36 | + | |:: consume .arity :.arity (r): $symbol| | |
37 | + | |:: consume .1 :.1 (r): $symbol| | |
38 | + | |:: consume .2 :.2 (r): $symbol| | |
39 | + | |:: consume message.arity :message.arity (r): $symbol| | |
40 | + | |:: consume message.1 :message.1 (r): $symbol| | |
41 | + | ||
42 | + | ||
43 | + | |:: jet @stdio write/1 :failed:?| | |
44 | + | |:: jet @stdio write/1| | |
45 | + | :@jet: "io.write(string.char(tonumber(stacks["1"][1][1])))" | |
46 | + | ||
47 | + | |:: push $stack $symbol :failed:?| | |
48 | + | |:: push @stdio.arity $arity| :@stdio.arity: $arity | |
49 | + | |:: push @stdio.1 $symbol| :@stdio.1: $symbol | |
50 | + | |:: push @stdio.2 $symbol| :@stdio.2: $symbol | |
51 | + | |:: push .arity $arity| :.arity: $arity | |
52 | + | |:: push .1 $symbol| :.1: $symbol | |
53 | + | |:: push .2 $symbol| :.2: $symbol | |
54 | + | |:: push message.arity $arity| :message.arity: $arity | |
55 | + | |:: push message.1 $symbol| :message.1: $symbol | |
56 | + | ||
57 | + | |:: pushvar $stack $reg :failed:?| | |
58 | + | |:: pushvar @stdio.2 1 :1: $1?| :@stdio.2: $1 | |
59 | + | ||
60 | + | ||
61 | + | |:: unbind 1 :1: $1| | |
62 | + | |:: unbind $reg| | |
63 | + | ||
64 | + | ||
65 | + | |:: rule 1 succeeded :failed:| :: rule 2 | |
66 | + | |:: rule 2 succeeded :failed:| :: rule 3 | |
67 | + | |:: rule 3 succeeded :failed:| :: rule 4 | |
68 | + | |:: rule $x succeeded :failed:?| | |
69 | + | |:: rule $x succeeded| :: rule 1 | |
70 | + | ||
71 | + | ||
72 | + | |:/:| :: print message :message: "Hello, World!" | |
73 | + | |:: rule 0| | |
74 | + | :: push .arity 2 :: push .1 print :: push .2 message | |
75 | + | :: push message.arity 1 :: push message.1 33 | |
76 | + | :: push message.arity 1 :: push message.1 100 | |
77 | + | :: push message.arity 1 :: push message.1 108 | |
78 | + | :: push message.arity 1 :: push message.1 114 | |
79 | + | :: push message.arity 1 :: push message.1 111 | |
80 | + | :: push message.arity 1 :: push message.1 87 | |
81 | + | :: push message.arity 1 :: push message.1 32 | |
82 | + | :: push message.arity 1 :: push message.1 44 | |
83 | + | :: push message.arity 1 :: push message.1 111 | |
84 | + | :: push message.arity 1 :: push message.1 108 | |
85 | + | :: push message.arity 1 :: push message.1 108 | |
86 | + | :: push message.arity 1 :: push message.1 101 | |
87 | + | :: push message.arity 1 :: push message.1 72 | |
88 | + | :: rule 0 succeeded | |
89 | + | ||
90 | + | |:@stdio: write $char| | |
91 | + | :@jet: "io.write(string.char(tonumber($char)))" | |
92 | + | |:: rule 1| | |
93 | + | :: match @stdio.arity 2 :: match @stdio.1 write :: bind @stdio.2 1 | |
94 | + | :: consume @stdio.arity | |
95 | + | :: consume @stdio.1 | |
96 | + | :: consume @stdio.2 | |
97 | + | :: jet @stdio write/1 | |
98 | + | :: unbind 1 | |
99 | + | :: rule 1 succeeded | |
100 | + | ||
101 | + | |:: print message? :message: $char| | |
102 | + | :@stdio: write $char | |
103 | + | |:: rule 2| | |
104 | + | :: match .arity 2 :: match .1 print :: match .2 message | |
105 | + | :: match message.arity 1 :: bind message.1 1 | |
106 | + | :: consume .arity :: consume .1 :: consume .2 | |
107 | + | :: consume message.arity :: consume message.1 | |
108 | + | :: push @stdio.arity 2 :: push @stdio.1 write :: pushvar @stdio.2 1 | |
109 | + | :: push .arity 2 :: push .1 print :: push .2 message | |
110 | + | :: unbind 1 | |
111 | + | :: rule 2 succeeded | |
112 | + | ||
113 | + | ||
114 | + | |:: print message| | |
115 | + | :@stdio: write 10 | |
116 | + | |:: rule 3| | |
117 | + | :: match .arity 2 :: match .1 print :: match .2 message | |
118 | + | :: consume .arity :: consume .1 :: consume .2 | |
119 | + | :: push @stdio.arity 2 :: push @stdio.1 write :: push @stdio.2 10 | |
120 | + | :: unbind 1 | |
121 | + | :: rule 3 succeeded | |
122 | + | ||
123 | + | ||
124 | + | || :: rule 0 |
上一页
下一页