expr.y (9be27a5d416925aef4ff816379c31b8cd18ff55d) | expr.y (6365757894d5e7ada8a1d074a21fdaf2973dd5ae) |
---|---|
1/* Simple expression parser */ 2%{ 3#define YYDEBUG 1 4#include <stdio.h> 5#include "util.h" 6#include "util/debug.h" 7#include <stdlib.h> // strtod() 8#define IN_EXPR_Y 1 --- 13 unchanged lines hidden (view full) --- 22%union { 23 double num; 24 char *str; 25} 26 27%token EXPR_PARSE EXPR_OTHER EXPR_ERROR 28%token <num> NUMBER 29%token <str> ID | 1/* Simple expression parser */ 2%{ 3#define YYDEBUG 1 4#include <stdio.h> 5#include "util.h" 6#include "util/debug.h" 7#include <stdlib.h> // strtod() 8#define IN_EXPR_Y 1 --- 13 unchanged lines hidden (view full) --- 22%union { 23 double num; 24 char *str; 25} 26 27%token EXPR_PARSE EXPR_OTHER EXPR_ERROR 28%token <num> NUMBER 29%token <str> ID |
30%destructor { free ($$); } <str> |
|
30%token MIN MAX IF ELSE SMT_ON 31%left MIN MAX IF 32%left '|' 33%left '^' 34%left '&' 35%left '-' '+' 36%left '*' '/' '%' 37%left NEG NOT --- 51 unchanged lines hidden (view full) --- 89if_expr: 90 expr IF expr ELSE expr { $$ = $3 ? $1 : $5; } 91 | expr 92 ; 93 94expr: NUMBER 95 | ID { if (lookup_id(ctx, $1, &$$) < 0) { 96 pr_debug("%s not found\n", $1); | 31%token MIN MAX IF ELSE SMT_ON 32%left MIN MAX IF 33%left '|' 34%left '^' 35%left '&' 36%left '-' '+' 37%left '*' '/' '%' 38%left NEG NOT --- 51 unchanged lines hidden (view full) --- 90if_expr: 91 expr IF expr ELSE expr { $$ = $3 ? $1 : $5; } 92 | expr 93 ; 94 95expr: NUMBER 96 | ID { if (lookup_id(ctx, $1, &$$) < 0) { 97 pr_debug("%s not found\n", $1); |
98 free($1); |
|
97 YYABORT; 98 } | 99 YYABORT; 100 } |
101 free($1); |
|
99 } 100 | expr '|' expr { $$ = (long)$1 | (long)$3; } 101 | expr '&' expr { $$ = (long)$1 & (long)$3; } 102 | expr '^' expr { $$ = (long)$1 ^ (long)$3; } 103 | expr '+' expr { $$ = $1 + $3; } 104 | expr '-' expr { $$ = $1 - $3; } 105 | expr '*' expr { $$ = $1 * $3; } 106 | expr '/' expr { if ($3 == 0) { --- 19 unchanged lines hidden --- | 102 } 103 | expr '|' expr { $$ = (long)$1 | (long)$3; } 104 | expr '&' expr { $$ = (long)$1 & (long)$3; } 105 | expr '^' expr { $$ = (long)$1 ^ (long)$3; } 106 | expr '+' expr { $$ = $1 + $3; } 107 | expr '-' expr { $$ = $1 - $3; } 108 | expr '*' expr { $$ = $1 * $3; } 109 | expr '/' expr { if ($3 == 0) { --- 19 unchanged lines hidden --- |