最後活躍 1748752843

修訂 479159b29a0a584c04a5cc509d3df157f7323259

hello-world.inlang.nils.nv 原始檔案 Playground
1|:: documentation for NILS Form|
2 :@doc string:
3"Nova In-Language Static Form is a possible structure for lowering
4Nova code into a bytecode language describable in Nova. This is not
5intended to be written by hand."
6
7|:@data stack: reset? :@data seen: $stack $value|
8 :@data: $stack $value
9|:@data stack: reset|
10
11|:@data stack: push $stack $value|
12 :@data: $stack $value
13
14|:@data stack: pop $stack :@data: $stack $value|
15 :@data stack: reset
16 :@data result: $value
17|:@data stack: pop $stack? :@data: $x $y|
18 :@data seen: $x $y
19|:@data stack: pop $stack|
20 :@data stack: reset
21 :@data result: empty
22
23|:@data stack: peek $stack :@data: $stack $value?|
24 :@data stack: reset
25 :@data result: $value
26|:@data stack: peek $stack? :@data: $x $y|
27 :@data seen: $x $y
28|:@data stack: peek $stack|
29 :@data stack: reset
30 :@data result: empty
31
32
33|:@retained stack: reset? :@retained seen: $stack $value|
34 :@retained: $stack $value
35|:@retained stack: reset|
36
37|:@retained stack: push $stack $value|
38 :@retained: $stack $value
39
40|:@retained stack: pop $stack :@retained: $stack $value|
41 :@retained stack: reset
42 :@retained result: $value
43|:@retained stack: pop $stack? :@retained: $x $y|
44 :@retained seen: $x $y
45|:@retained stack: pop $stack|
46 :@retained stack: reset
47 :@retained result: empty
48
49|:@retained stack: peek $stack :@retained: $stack $value?|
50 :@retained stack: reset
51 :@retained result: $value
52|:@retained stack: peek $stack? :@retained: $x $y|
53 :@retained seen: $x $y
54|:@retained stack: peek $stack|
55 :@retained stack: reset
56 :@retained result: empty
57
58
59|:@registers: reset :@reg seen: $reg $value|
60 :@reg: $reg $value
61|:@registers: reset|
62
63|:@registers: store $register $value :@reg: $register $other-value|
64 :@registers: reset
65 :@reg: $register $value
66|:@registers: store $register $value :@reg: $other-register $other-value|
67 :@reg seen: $other-register $other-value
68|:@registers: store $register $value|
69 :@reg: $register $value
70
71|:@registers: fetch $register :@reg: $register $value?|
72 :@registers: reset
73 :@registers result: $value
74|:@registers: fetch $register :@reg: $other-register $other-value|
75 :seen @reg: $other-register $other-value
76|:@registers: fetch $register|
77 :@registers: reset
78 :@registers result: empty
79
80|:@registers: clear $register :@reg: $register $value|
81 :@registers: reset
82|:@registers: clear $register :@reg: $other-register $value|
83 :@registers seen: $other-register $value
84|:@registers: clear $register|
85
86
87
88|:: match $symbol at top of $stack :failed:?|
89|:: match $symbol at top of $stack :@data result: $symbol|
90 :@retained stack: push $stack $symbol
91|:: match $symbol at top of $stack :@data result: $wrong-symbol|
92 :@data stack: push $stack $wrong-symbol :failed:
93|:: match $symbol at top of $stack :@data result: empty|
94 :failed:
95|:: match $symbol at top of $stack?|
96 :@data stack: pop $stack
97
98|:: bind $stack $reg :failed:?|
99|:: bind $stack $reg :@registers result: $empty :@data result: $symbol|
100 :@retained stack: push $stack $symbol
101 :@registers: store $reg $symbol
102|:: bind $stack $reg :@register result: $symbol :@data result: $symbol|
103 :@retained stack: push $stack $symbol
104|:: bind $stack $reg :@register result: $symbol :@data result: $different-symbol|
105 :failed: :@data stack: push $stack $different-symbol
106|:: bind $stack $reg?|
107 :@registers: fetch $reg
108 :@data stack: pop $stack
109
110
111|:: consume $stack :failed:? :@retained result: empty|
112|:: consume $stack :failed:? :@retained result: $value|
113 :@data stack: push $stack $value
114|:: consume $stack :@retained result: $_|
115|:: consume $stack?|
116 :@retained stack: pop $stack
117
118
119|:: push $stack $symbol :failed:?|
120|:: push $stack $symbol|
121 :@data stack: push $stack $symbol
122
123
124|:: pushvar $stack $reg :failed:?|
125|:: pushvar $stack $reg :@registers result: $value|
126 :@data stack: push $stack $value
127|:: pushvar $stack $reg?|
128 :@registers: fetch $reg
129
130
131|:: unbind $reg| :@registers: clear $reg
132|:: unbind|
133
134
135|:: done :rule: 1 :failed:| :: rule 2
136|:: done :rule: 2 :failed:| :: rule 3
137|:: done :rule: 3 :failed:| :: rule 4
138|:: done :rule: $x :failed:?|
139|:: done :rule: $x| :: rule 1
140
141
142|:: jet @stdio write/1 :failed:?|
143|:: jet @stdio write/1 :@registers result: $symbol|
144 :@jet: "io.write(string.char(tonumber($symbol)))"
145|:: jet @stdio write/1?|
146 :@registers: fetch 1
147
148|:/:| :: print message :message: "Hello, World!"
149|:: rule 0|
150 :rule: 0
151 :: push .arity 2 :: push .1 print :: push .2 message
152 :: push message.arity 1 :: push message.1 33
153 :: push message.arity 1 :: push message.1 100
154 :: push message.arity 1 :: push message.1 108
155 :: push message.arity 1 :: push message.1 114
156 :: push message.arity 1 :: push message.1 111
157 :: push message.arity 1 :: push message.1 87
158 :: push message.arity 1 :: push message.1 32
159 :: push message.arity 1 :: push message.1 44
160 :: push message.arity 1 :: push message.1 111
161 :: push message.arity 1 :: push message.1 108
162 :: push message.arity 1 :: push message.1 108
163 :: push message.arity 1 :: push message.1 101
164 :: push message.arity 1 :: push message.1 72
165 :: done
166
167|:@stdio: write $char|
168 :@jet: "io.write(string.char(tonumber($char)))"
169|:: rule 1|
170 :rule: 1
171 :: match 2 at top of @stdio.arity :: match write at top of @stdio.1 :: bind @stdio.2 1
172 :: consume @stdio.arity
173 :: consume @stdio.1
174 :: consume @stdio.2
175 :: jet @stdio write/1
176 :: unbind 1
177 :: done
178
179|:: print message? :message: $char|
180 :@stdio: write $char
181|:: rule 2|
182 :rule: 2
183 :: match 2 at top of .arity :: match print at top of .1 :: match message at top of .2
184 :: match 1 at top of message.arity :: bind message.1 1
185 :: consume .arity :: consume .1 :: consume .2
186 :: consume message.arity :: consume message.1
187 :: push @stdio.arity 2 :: push @stdio.1 write :: pushvar @stdio.2 1
188 :: push .arity 2 :: push .1 print :: push .2 message
189 :: unbind 1
190 :: done
191
192
193|:: print message|
194 :@stdio: write 10
195|:: rule 3|
196 :rule: 3
197 :: match 2 at top of .arity :: match print at top of .1 :: match message at top of .2
198 :: consume .arity :: consume .1 :: consume .2
199 :: push @stdio.arity 2 :: push @stdio.1 write :: push @stdio.2 10
200 :: unbind 1
201 :: done
202
203
204|| :: rule 0