1 %{
2 #include <types.h>
3 %}
4 
5 %define api.prefix {bla}
6 %type <t> expr
7 %left OR
8 %left AND
9 %nonassoc NOT
10 %token <s> ID
11 
12 %%
13 
14 start: expr { root = $1; }
15 expr: expr AND expr { auto t = std::make_shared<Tree>(); t->val = "AND"; t->children = { $1, $3 }; $$ = t; }
16     | expr OR expr { auto t = std::make_shared<Tree>(); t->val = "OR"; t->children = { $1, $3 }; $$ = t; }
17     | NOT expr { auto t = std::make_shared<Tree>(); t->val = "NOT"; t->children = { $2 }; $$ = t; }
18     | ID { auto t = std::make_shared<Tree>(); t->val = $1; $$ = t; }
19 
20 %%
21 
22 TreePtr root;
23 
main()24 int main()
25 {
26     blaparse();
27     if (!root)
28         return 1;
29     root->print();
30     std::cout << std::endl;
31 }
32