28{
32
33 symbol_table_t symbol_table;
34
35 symbol_table.add_function("print",
36 [](T t) -> T
37 {
38 printf("%1d",static_cast<int>(t));
39 return T(1);
40 });
41
42 const std::string e_10k_digits_spigot =
43 " const var num_digits := 10000; "
44 " var a[num_digits] := [2:1]; "
45 " var b[num_digits] := [1]; "
46 " "
47 " print(2); "
48 " "
49 " for (var digit := 0; digit < num_digits; digit += 1) "
50 " { "
51 " b *= 10; "
52 " "
53 " for (var i := (b[] - 1); i > 0; i -= 1) "
54 " { "
55 " var q := floor(b[i] / a[i]); "
56 " var r := floor(b[i] % a[i]); "
57 " b[i - 1] := b[i - 1] + q; "
58 " b[i] := r; "
59 " }; "
60 " "
61 " print(floor(b[0] / a[0])); "
62 " "
63 " b[0] %= a[0]; "
64 " } ";
65
66 expression_t expression;
67 expression.register_symbol_table(symbol_table);
68
69 parser_t parser;
70 parser.
compile(e_10k_digits_spigot,expression);
71
72 expression.value();
73}
bool compile(const std::string &expression_string, expression< T > &expr)