summaryrefslogtreecommitdiff
path: root/expr.y
diff options
context:
space:
mode:
Diffstat (limited to 'expr.y')
-rw-r--r--expr.y49
1 files changed, 38 insertions, 11 deletions
diff --git a/expr.y b/expr.y
index 1060e27..785b004 100644
--- a/expr.y
+++ b/expr.y
@@ -12,9 +12,12 @@ static void breakpoint(void) { }
%token INTEGER
%token STRING
%token '(' ')'
-%left MATCH MULTIPLICATION
+%left ':'
+%left '*' '/' '%'
%left '+' '-'
-%left COMPARISON AND OR
+%left '=' '<' '>' LE GE NE
+%left '&'
+%left '|'
%start expr
@@ -27,15 +30,25 @@ expr : STRING {
}
| '(' expr ')' {
- printf("a parenthesized expression\n");
}
- | expr MATCH expr {
- printf("match two\n");
+ | expr ':' expr {
+ printf("match\n");
}
- | expr MULTIPLICATION expr {
- printf("multiplicationish\n");
+ | expr '*' expr {
+ $$.u.i = $1.u.i * $3.u.i;
+ printf("%d\n", $$.u.i);
+ }
+
+ | expr '/' expr {
+ $$.u.i = $1.u.i / $3.u.i;
+ printf("%d\n", $$.u.i);
+ }
+
+ | expr '%' expr {
+ $$.u.i = $1.u.i % $3.u.i;
+ printf("%d\n", $$.u.i);
}
| expr '+' expr {
@@ -48,15 +61,29 @@ expr : STRING {
printf("%d\n", $$.u.i);
}
- | expr COMPARISON expr {
- printf("compare\n");
+ | expr '=' expr {
+ }
+
+ | expr NE expr {
+ }
+
+ | expr '<' expr {
+ }
+
+ | expr LE expr {
+ }
+
+ | expr '>' expr {
+ }
+
+ | expr GE expr {
}
- | expr AND expr {
+ | expr '&' expr {
printf("and\n");
}
- | expr OR expr {
+ | expr '|' expr {
printf("or\n");
}
;