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()24int main() 25 { 26 blaparse(); 27 if (!root) 28 return 1; 29 root->print(); 30 std::cout << std::endl; 31 } 32