diff options
author | Jakob Kaivo <jkk@ung.org> | 2022-04-17 15:21:23 -0400 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2022-04-17 15:21:23 -0400 |
commit | 785f598db1da0406416cd6f184d929112bdd0e80 (patch) | |
tree | 8f3130ea7b0de58ad499b3e35a0b168171b3d4cb | |
parent | 1139f76e87b33301ac3eb597bef408e3b2bf6025 (diff) |
now multiplicationish things
-rw-r--r-- | expr.l | 26 | ||||
-rw-r--r-- | expr.y | 49 |
2 files changed, 51 insertions, 24 deletions
@@ -17,22 +17,22 @@ DIGIT [0-9] %% -"|" return OR; -"&" return AND; -"=" return COMPARISON; -">" return COMPARISON; -">=" return COMPARISON; -"<" return COMPARISON; -"<=" return COMPARISON; -"!=" return COMPARISON; +"|" return '|'; +"&" return '&'; +"=" return '='; +">" return '>'; +">=" return GE; +"<" return '<'; +"<=" return LE; +"!=" return NE; "+" return '+'; -"-" return '-';; -"*" return MULTIPLICATION; -"/" return MULTIPLICATION; -"%" return MULTIPLICATION; +"-" return '-'; +"*" return '*'; +"/" return '/'; +"%" return '%'; "(" return '('; ")" return ')'; -":" return MATCH; +":" return ':'; {DIGIT}+ { yylval.u.i = atoi(yytext); return yylval.type = INTEGER; } -{DIGIT}+ { yylval.u.i = atoi(yytext); return yylval.type = INTEGER; } .+ { yylval.u.s = strdup(yytext); return yylval.type = STRING; } @@ -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"); } ; |