main.lua
· 404 B · Lua
Eredeti
Playground
pp = require "pprint"
package.path = package.path .. ";./src/?.lua"
local Lvera = require "src.lvera"
local lua_generator = require "src.generators.lua"
local lvera = Lvera.new()
lvera:load("samples/hailstone.nv")
lvera:add_pass(require "passes.ports" (lua_generator.ports))
lvera:add_pass(require "passes.constants")
lvera:add_pass(require "passes.eliminate-dead-code")
lvera:compile(lua_generator)
1 | pp = require "pprint" |
2 | package.path = package.path .. ";./src/?.lua" |
3 | local Lvera = require "src.lvera" |
4 | local lua_generator = require "src.generators.lua" |
5 | |
6 | local lvera = Lvera.new() |
7 | |
8 | lvera:load("samples/hailstone.nv") |
9 | |
10 | lvera:add_pass(require "passes.ports" (lua_generator.ports)) |
11 | lvera:add_pass(require "passes.constants") |
12 | lvera:add_pass(require "passes.eliminate-dead-code") |
13 | |
14 | lvera:compile(lua_generator) |
15 |
zz.generated.lua
· 4.8 KiB · Lua
Eredeti
Playground
local min, max, huge = math.min, math.max, math.huge
machine.counters = {
["hailstone"] = 1,
["x:27"] = 1,
}
function match(counters)
if counters["x:6"] > 0 then
acc = counters["x:6"]
counters["x:6"] = max(counters["x:6"] - acc, 0)
counters["x"] = counters["x"] + acc * 6
return true
end
if counters["x:3"] > 0 then
acc = counters["x:3"]
counters["x:3"] = max(counters["x:3"] - acc, 0)
counters["x"] = counters["x"] + acc * 3
return true
end
if counters["move"] > 0 and counters["2"] > 0 then
local acc = huge
acc = min(acc, counters["2"])
acc = min(acc, counters["move"])
counters["move"] = max(counters["move"] - acc, 0)
counters["2"] = max(counters["2"] - acc, 0)
counters["x"] = counters["x"] + acc * 1
counters["move"] = counters["move"] + acc * 1
return true
end
if counters["move"] > 0 and counters["1"] > 0 then
local acc = huge
acc = min(acc, counters["1"])
acc = min(acc, counters["move"])
counters["move"] = max(counters["move"] - acc, 0)
counters["1"] = max(counters["1"] - acc, 0)
counters["x"] = counters["x"] + acc * 1
return true
end
if counters["move"] > 0 then
acc = counters["move"]
counters["move"] = max(counters["move"] - acc, 0)
counters["hailstone"] = counters["hailstone"] + acc * 1
return true
end
if counters["odd"] > 0 and counters["2"] > 0 then
local acc = huge
acc = min(acc, counters["2"])
acc = min(acc, counters["odd"])
counters["odd"] = max(counters["odd"] - acc, 0)
counters["2"] = max(counters["2"] - acc, 0)
counters["x:6"] = counters["x:6"] + acc * 1
counters["odd"] = counters["odd"] + acc * 1
return true
end
if counters["odd"] > 0 then
acc = counters["odd"]
counters["odd"] = max(counters["odd"] - acc, 0)
counters["hailstone"] = counters["hailstone"] + acc * 1
counters["x"] = counters["x"] + acc * 1
return true
end
if counters["eval"] > 0 and counters["x"] > 0 and counters["1"] > 0 then
local acc = huge
acc = min(acc, counters["1"])
acc = min(acc, counters["eval"])
acc = min(acc, counters["x"])
counters["eval"] = max(counters["eval"] - acc, 0)
counters["x"] = max(counters["x"] - acc, 0)
counters["1"] = max(counters["1"] - acc, 0)
counters["2"] = counters["2"] + acc * 1
counters["eval"] = counters["eval"] + acc * 1
return true
end
if counters["eval"] > 0 and counters["x"] > 0 then
local acc = huge
acc = min(acc, counters["x"])
acc = min(acc, counters["eval"])
counters["eval"] = max(counters["eval"] - acc, 0)
counters["x"] = max(counters["x"] - acc, 0)
counters["1"] = counters["1"] + acc * 1
counters["eval"] = counters["eval"] + acc * 1
return true
end
if counters["eval"] > 0 and counters["2"] > 0 and counters["1"] > 0 then
local acc = huge
acc = min(acc, counters["1"])
acc = min(acc, counters["2"])
acc = min(acc, counters["eval"])
counters["eval"] = max(counters["eval"] - acc, 0)
counters["2"] = max(counters["2"] - acc, 0)
counters["1"] = max(counters["1"] - acc, 0)
counters["x:3"] = counters["x:3"] + acc * 1
counters["2"] = counters["2"] + acc * 1
counters["odd"] = counters["odd"] + acc * 1
return true
end
if counters["eval"] > 0 then
acc = counters["eval"]
counters["eval"] = max(counters["eval"] - acc, 0)
counters["move"] = counters["move"] + acc * 1
return true
end
if counters["hailstone"] > 0 then
acc = counters["hailstone"]
counters["hailstone"] = max(counters["hailstone"] - acc, 0)
counters["eval"] = counters["eval"] + acc * 1
counters["@show counters"] = counters["@show counters"] + acc * 1
return true
end
return false
end
return machine
1 | local min, max, huge = math.min, math.max, math.huge |
2 | machine.counters = { |
3 | ["hailstone"] = 1, |
4 | ["x:27"] = 1, |
5 | } |
6 | function match(counters) |
7 | if counters["x:6"] > 0 then |
8 | acc = counters["x:6"] |
9 | counters["x:6"] = max(counters["x:6"] - acc, 0) |
10 | counters["x"] = counters["x"] + acc * 6 |
11 | return true |
12 | end |
13 | if counters["x:3"] > 0 then |
14 | acc = counters["x:3"] |
15 | counters["x:3"] = max(counters["x:3"] - acc, 0) |
16 | counters["x"] = counters["x"] + acc * 3 |
17 | return true |
18 | end |
19 | if counters["move"] > 0 and counters["2"] > 0 then |
20 | local acc = huge |
21 | acc = min(acc, counters["2"]) |
22 | acc = min(acc, counters["move"]) |
23 | counters["move"] = max(counters["move"] - acc, 0) |
24 | counters["2"] = max(counters["2"] - acc, 0) |
25 | counters["x"] = counters["x"] + acc * 1 |
26 | counters["move"] = counters["move"] + acc * 1 |
27 | return true |
28 | end |
29 | if counters["move"] > 0 and counters["1"] > 0 then |
30 | local acc = huge |
31 | acc = min(acc, counters["1"]) |
32 | acc = min(acc, counters["move"]) |
33 | counters["move"] = max(counters["move"] - acc, 0) |
34 | counters["1"] = max(counters["1"] - acc, 0) |
35 | counters["x"] = counters["x"] + acc * 1 |
36 | return true |
37 | end |
38 | if counters["move"] > 0 then |
39 | acc = counters["move"] |
40 | counters["move"] = max(counters["move"] - acc, 0) |
41 | counters["hailstone"] = counters["hailstone"] + acc * 1 |
42 | return true |
43 | end |
44 | if counters["odd"] > 0 and counters["2"] > 0 then |
45 | local acc = huge |
46 | acc = min(acc, counters["2"]) |
47 | acc = min(acc, counters["odd"]) |
48 | counters["odd"] = max(counters["odd"] - acc, 0) |
49 | counters["2"] = max(counters["2"] - acc, 0) |
50 | counters["x:6"] = counters["x:6"] + acc * 1 |
51 | counters["odd"] = counters["odd"] + acc * 1 |
52 | return true |
53 | end |
54 | if counters["odd"] > 0 then |
55 | acc = counters["odd"] |
56 | counters["odd"] = max(counters["odd"] - acc, 0) |
57 | counters["hailstone"] = counters["hailstone"] + acc * 1 |
58 | counters["x"] = counters["x"] + acc * 1 |
59 | return true |
60 | end |
61 | if counters["eval"] > 0 and counters["x"] > 0 and counters["1"] > 0 then |
62 | local acc = huge |
63 | acc = min(acc, counters["1"]) |
64 | acc = min(acc, counters["eval"]) |
65 | acc = min(acc, counters["x"]) |
66 | counters["eval"] = max(counters["eval"] - acc, 0) |
67 | counters["x"] = max(counters["x"] - acc, 0) |
68 | counters["1"] = max(counters["1"] - acc, 0) |
69 | counters["2"] = counters["2"] + acc * 1 |
70 | counters["eval"] = counters["eval"] + acc * 1 |
71 | return true |
72 | end |
73 | if counters["eval"] > 0 and counters["x"] > 0 then |
74 | local acc = huge |
75 | acc = min(acc, counters["x"]) |
76 | acc = min(acc, counters["eval"]) |
77 | counters["eval"] = max(counters["eval"] - acc, 0) |
78 | counters["x"] = max(counters["x"] - acc, 0) |
79 | counters["1"] = counters["1"] + acc * 1 |
80 | counters["eval"] = counters["eval"] + acc * 1 |
81 | return true |
82 | end |
83 | if counters["eval"] > 0 and counters["2"] > 0 and counters["1"] > 0 then |
84 | local acc = huge |
85 | acc = min(acc, counters["1"]) |
86 | acc = min(acc, counters["2"]) |
87 | acc = min(acc, counters["eval"]) |
88 | counters["eval"] = max(counters["eval"] - acc, 0) |
89 | counters["2"] = max(counters["2"] - acc, 0) |
90 | counters["1"] = max(counters["1"] - acc, 0) |
91 | counters["x:3"] = counters["x:3"] + acc * 1 |
92 | counters["2"] = counters["2"] + acc * 1 |
93 | counters["odd"] = counters["odd"] + acc * 1 |
94 | return true |
95 | end |
96 | if counters["eval"] > 0 then |
97 | acc = counters["eval"] |
98 | counters["eval"] = max(counters["eval"] - acc, 0) |
99 | counters["move"] = counters["move"] + acc * 1 |
100 | return true |
101 | end |
102 | if counters["hailstone"] > 0 then |
103 | acc = counters["hailstone"] |
104 | counters["hailstone"] = max(counters["hailstone"] - acc, 0) |
105 | counters["eval"] = counters["eval"] + acc * 1 |
106 | counters["@show counters"] = counters["@show counters"] + acc * 1 |
107 | return true |
108 | end |
109 | return false |
110 | end |
111 | return machine |