diff options
author | Julian T <julian@jtle.dk> | 2019-10-24 09:17:29 +0200 |
---|---|---|
committer | Julian T <julian@jtle.dk> | 2019-10-24 09:18:01 +0200 |
commit | 5bc38338c79ef313f639696ec85e424c5d9c0b0c (patch) | |
tree | 92e0fa72ed025ea2dc23aff399546a3eb19e5252 /sem1/osc/mm11/regn2/regn.y | |
parent | ad2bc056ae684f8de57f2ff880e51440d07ee04a (diff) |
Added regn2
Diffstat (limited to 'sem1/osc/mm11/regn2/regn.y')
-rw-r--r-- | sem1/osc/mm11/regn2/regn.y | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/sem1/osc/mm11/regn2/regn.y b/sem1/osc/mm11/regn2/regn.y new file mode 100644 index 0000000..a181cb3 --- /dev/null +++ b/sem1/osc/mm11/regn2/regn.y @@ -0,0 +1,46 @@ +%{ +#include <stdio.h> +#include <math.h> +#include <string.h> +%} + +%union { + double dval; +} + +%token <dval> TAL +%token LOG EXP SQRT + +%left '-' '+' +%left LOG EXP SQRT +%left '*' '/' +%right UMINUS + +%type <dval> expression + +%% + +statement_list: statement '\n' + | statement_list statement '\n' ; + +statement: expression {;}; + +expression: expression '+' expression {printf("sum \n");} + | expression '-' expression {printf("sub \n");} + | expression '*' expression {printf("mul \n");} + | expression '/' expression {if ($3 == 0.0) + yyerror("divide dy zero"); + else printf("div \n");} + | '-' expression %prec UMINUS {printf("neg \n");} + | '(' expression ')' {;} + | LOG expression {printf("log \n");} + | EXP expression {printf("exp \n");} + | SQRT expression {printf("sqrt \n");} + | TAL {printf("load %f \n", $$);}; +%% + +int main() +{ + yyparse(); +} + |