@@ -3,6 +3,17 @@ BITS = 1
3
3
alias Vars = Array (Array (String ))
4
4
alias Circuit = Array (Tuple (Array (String ), String ))
5
5
6
+ def parse_input (raw : String ) : Tuple (Vars , Circuit )
7
+ raw_vars, raw_circuit = raw.split(" \n\n " ).map { |r | r.lines }
8
+ vars = raw_vars.map { |r | r.split(" : " ) }
9
+ circuit = raw_circuit.map do |r |
10
+ raw_expr, res = r.split(" -> " )
11
+ expr = raw_expr.split(' ' )
12
+ {expr, res}
13
+ end
14
+ {vars, circuit}
15
+ end
16
+
6
17
def translate_to_z3 (vars : Vars , circuit : Circuit ) : String
7
18
[
8
19
* vars.map { |v | " (declare-const #{ v[0 ] } (_ BitVec #{ BITS } ))" },
@@ -58,14 +69,7 @@ positionals = ARGV.select { |a| !flags.includes?(a) }
58
69
59
70
path = positionals[0 ]
60
71
raw = File .read(path)
61
-
62
- raw_vars, raw_circuit = raw.split(" \n\n " ).map { |r | r.lines }
63
- vars = raw_vars.map { |r | r.split(" : " ) }
64
- circuit = raw_circuit.map do |r |
65
- raw_expr, res = r.split(" -> " )
66
- expr = raw_expr.split(' ' )
67
- {expr, res}
68
- end
72
+ vars, circuit = parse_input(raw)
69
73
70
74
if flags.includes?(" --dump-dot" )
71
75
puts translate_to_dot(vars, circuit)
0 commit comments