diff options
Diffstat (limited to 'expr.y')
-rw-r--r-- | expr.y | 49 |
1 files changed, 38 insertions, 11 deletions
@@ -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"); } ; |