expr.y (3e21a28a01e227726456a51933ed004c2df31850) | expr.y (ff1a12f962dff5b490c5ce1c2c4bcd0bf3bf517d) |
---|---|
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 --- 27 unchanged lines hidden (view full) --- 36%token <num> NUMBER 37%token <str> ID 38%destructor { free ($$); } <str> 39%token MIN MAX IF ELSE SMT_ON D_RATIO 40%left MIN MAX IF 41%left '|' 42%left '^' 43%left '&' | 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 --- 27 unchanged lines hidden (view full) --- 36%token <num> NUMBER 37%token <str> ID 38%destructor { free ($$); } <str> 39%token MIN MAX IF ELSE SMT_ON D_RATIO 40%left MIN MAX IF 41%left '|' 42%left '^' 43%left '&' |
44%left '<' '>' |
|
44%left '-' '+' 45%left '*' '/' '%' 46%left NEG NOT 47%type <num> expr if_expr 48 49%{ 50static void expr_error(double *final_val __maybe_unused, 51 struct expr_parse_ctx *ctx __maybe_unused, --- 16 unchanged lines hidden (view full) --- 68 69other: ID 70{ 71 expr__add_id(ctx, $1, 0.0); 72} 73| 74MIN | MAX | IF | ELSE | SMT_ON | NUMBER | '|' | '^' | '&' | '-' | '+' | '*' | '/' | '%' | '(' | ')' | ',' 75| | 45%left '-' '+' 46%left '*' '/' '%' 47%left NEG NOT 48%type <num> expr if_expr 49 50%{ 51static void expr_error(double *final_val __maybe_unused, 52 struct expr_parse_ctx *ctx __maybe_unused, --- 16 unchanged lines hidden (view full) --- 69 70other: ID 71{ 72 expr__add_id(ctx, $1, 0.0); 73} 74| 75MIN | MAX | IF | ELSE | SMT_ON | NUMBER | '|' | '^' | '&' | '-' | '+' | '*' | '/' | '%' | '(' | ')' | ',' 76| |
76D_RATIO | 77'<' | '>' | D_RATIO |
77 78all_expr: if_expr { *final_val = $1; } 79 ; 80 81if_expr: 82 expr IF expr ELSE expr { $$ = $3 ? $1 : $5; } 83 | expr 84 ; --- 4 unchanged lines hidden (view full) --- 89 free($1); 90 YYABORT; 91 } 92 free($1); 93 } 94 | expr '|' expr { $$ = (long)$1 | (long)$3; } 95 | expr '&' expr { $$ = (long)$1 & (long)$3; } 96 | expr '^' expr { $$ = (long)$1 ^ (long)$3; } | 78 79all_expr: if_expr { *final_val = $1; } 80 ; 81 82if_expr: 83 expr IF expr ELSE expr { $$ = $3 ? $1 : $5; } 84 | expr 85 ; --- 4 unchanged lines hidden (view full) --- 90 free($1); 91 YYABORT; 92 } 93 free($1); 94 } 95 | expr '|' expr { $$ = (long)$1 | (long)$3; } 96 | expr '&' expr { $$ = (long)$1 & (long)$3; } 97 | expr '^' expr { $$ = (long)$1 ^ (long)$3; } |
98 | expr '<' expr { $$ = $1 < $3; } 99 | expr '>' expr { $$ = $1 > $3; } |
|
97 | expr '+' expr { $$ = $1 + $3; } 98 | expr '-' expr { $$ = $1 - $3; } 99 | expr '*' expr { $$ = $1 * $3; } 100 | expr '/' expr { if ($3 == 0) { 101 pr_debug("division by zero\n"); 102 YYABORT; 103 } 104 $$ = $1 / $3; --- 16 unchanged lines hidden --- | 100 | expr '+' expr { $$ = $1 + $3; } 101 | expr '-' expr { $$ = $1 - $3; } 102 | expr '*' expr { $$ = $1 * $3; } 103 | expr '/' expr { if ($3 == 0) { 104 pr_debug("division by zero\n"); 105 YYABORT; 106 } 107 $$ = $1 / $3; --- 16 unchanged lines hidden --- |