bool

simple boolean algebra solver
Log | Files | Refs

bool.y (846B)


      1 %{
      2 #include <stdio.h>
      3 #include <stdlib.h>
      4 #include "expr.h"
      5 
      6 extern int yylex();
      7 int yyerror(const char *);
      8 btree *program;
      9 char vars[26] = {0};
     10 
     11 btree *
     12 mkbtree(char op, btree *left, btree *right) {
     13 	btree *bin = malloc(sizeof(btree));
     14 	bin->op = op;
     15 	bin->left = left;
     16 	bin->right = right;
     17 	return bin;
     18 }
     19 
     20 %}
     21 
     22 %union {
     23 	struct btree *tree;
     24 	char sym;
     25 }
     26 
     27 %token <sym> SYMBOL
     28 
     29 %type <tree> expr
     30 %type <tree> symbol 
     31 
     32 %left '+' 
     33 %left '.' 
     34 %left '!'
     35 %left '(' ')'
     36 
     37 %%
     38 
     39 prog	: expr			{program = $1;}
     40 
     41 expr	: expr '.' expr		{$$ = mkbtree('.', $1, $3);}
     42      	| expr '+' expr		{$$ = mkbtree('+', $1, $3);}
     43 	| '!' expr		{$$ = mkbtree('!', $2, NULL);}
     44 	| '(' expr ')'		{$$ = $2;}
     45 	| symbol		
     46 	;
     47 
     48 symbol  : SYMBOL		{$$ = mkbtree($1, NULL, NULL); vars[$1 - 65] = $1;}
     49 	;
     50 
     51 %%
     52 
     53 int
     54 yyerror(const char *s) {
     55 	fprintf(stderr, "error: %s\n", s);
     56 	return 1;
     57 }