parser_demo/
parser_demo.rs1use zelen::parse;
2
3fn main() {
4 println!("=== MiniZinc Parser Examples ===\n");
5
6 println!("Example 1: N-Queens Problem");
8 let nqueens = r#"
9% N-Queens Problem
10int: n = 8;
11
12% Decision variables: queen position in each row
13array[1..n] of var 1..n: queens;
14
15% All queens in different columns
16constraint alldifferent(queens);
17
18% No two queens on same diagonal
19constraint forall(i in 1..n, j in i+1..n) (
20 queens[i] != queens[j] + (j - i) /\
21 queens[i] != queens[j] - (j - i)
22);
23
24solve satisfy;
25
26output ["queens = ", show(queens), "\n"];
27 "#;
28
29 match parse(nqueens) {
30 Ok(model) => println!("✓ Successfully parsed {} items\n", model.items.len()),
31 Err(e) => println!("✗ Parse error:\n{}\n", e),
32 }
33
34 println!("Example 2: Simple Optimization");
36 let optimization = r#"
37int: budget = 100;
38array[1..5] of int: costs = [10, 20, 15, 30, 25];
39array[1..5] of int: values = [50, 100, 75, 150, 125];
40array[1..5] of var 0..1: x;
41
42constraint sum(i in 1..5)(costs[i] * x[i]) <= budget;
43
44solve maximize sum(i in 1..5)(values[i] * x[i]);
45 "#;
46
47 match parse(optimization) {
48 Ok(model) => println!("✓ Successfully parsed {} items\n", model.items.len()),
49 Err(e) => println!("✗ Parse error:\n{}\n", e),
50 }
51
52 println!("Example 3: Syntax Error (missing colon)");
54 let error1 = r#"
55int n = 5;
56var 1..n: x;
57 "#;
58
59 match parse(error1) {
60 Ok(_) => println!("✗ Should have failed!\n"),
61 Err(e) => println!("✓ Caught error:\n{}\n", e),
62 }
63
64 println!("Example 4: Syntax Error (missing semicolon)");
66 let error2 = r#"
67int: n = 5
68var 1..n: x;
69 "#;
70
71 match parse(error2) {
72 Ok(_) => println!("✗ Should have failed!\n"),
73 Err(e) => println!("✓ Caught error:\n{}\n", e),
74 }
75
76 println!("Example 5: Complex Expressions");
78 let complex = r#"
79int: n = 10;
80array[1..n] of var 1..100: x;
81
82constraint sum(x) == 500;
83constraint forall(i in 1..n-1)(x[i] <= x[i+1]);
84constraint x[1] >= 10;
85constraint x[n] <= 90;
86
87solve minimize sum(i in 1..n)(x[i] * x[i]);
88 "#;
89
90 match parse(complex) {
91 Ok(model) => println!("✓ Successfully parsed {} items\n", model.items.len()),
92 Err(e) => println!("✗ Parse error:\n{}\n", e),
93 }
94
95 println!("Example 6: Array Comprehension");
97 let array_comp = r#"
98int: n = 10;
99array[1..n] of int: squares = [i*i | i in 1..n];
100array[int] of int: evens = [i | i in 1..20 where i mod 2 == 0];
101 "#;
102
103 match parse(array_comp) {
104 Ok(model) => println!("✓ Successfully parsed {} items\n", model.items.len()),
105 Err(e) => println!("✗ Parse error:\n{}\n", e),
106 }
107
108 println!("Example 7: Set Operations");
110 let sets = r#"
111set of int: S = {1, 3, 5, 7, 9};
112set of int: T = 1..10;
113var 1..10: x;
114
115constraint x in S;
116constraint x in T;
117 "#;
118
119 match parse(sets) {
120 Ok(model) => println!("✓ Successfully parsed {} items\n", model.items.len()),
121 Err(e) => println!("✗ Parse error:\n{}\n", e),
122 }
123
124 println!("=== All examples completed ===");
125}